JavaScript와 C는 문법이 꽤나 비슷하다. 자주 사용하는 for
문만 봐도 초기식, 조건식, 증감식이라는 문법 구조가 상당히 비슷해 차이점이 별로 없어 보이지만, 분명히 있다.
JS에서 변수를 선언할 때에는 이 변수에 무슨 타입의 값을 넣을지 정해 주지 않아도 나중에 대입되는 값에 따라서 타입이 정해진다. 그렇기에 JS는 동적 타입 언어이다. 반면 C에서 변수를 선언할 때에는 타입을 정해줘야 하므로 C는 정적 타입 언어이다. 그래서 변수나 함수 등의 선언 문법에서 차이가 발생하는데, JS에서는 var 변수이름, function 함수이름
와 같은 방식으로 선언하여 이 변수의 데이터 타입은 무엇인지, 함수의 반환형은 무엇인지 정해지기 전까지는 알 수 없다. C에서는 int 변수이름, void 함수이름
등의 방식으로 선언되어 선언문만 봐도 변수의 타입, 함수의 반환형을 알 수 있다.
JS는 객체 지향 프로그래밍 언어이다. 반면 C는 절차 지향 프로그래밍 언어이며, 이는 꽤나 큰 차이가 있다. 객체 지향 프로그래밍 언어에서는 객체를 선언할 수 있으며, 중괄호{}로 선언할 수 있다. C에서도 구조체(struct)라는 비슷한 개념이 있지만, 클래스와 상속 등의 개념은 C언어에서 정의되어 있지 않아 사실상 이 차이점은 두 언어 간의 가장 큰 차이라고 볼 수 있다.
JS에서 출력할 때에는 보통 웹에서는 document.write(), 콘솔에서는 console.log()등의 함수를 사용하는데, C에서는 출력으로 printf(), puts()등의 함수를 사용한다. JS에서 입력받을 때에는 웹에서 prompt()함수를, C에서는 입력으로 gets(), scanf()등의 함수를 사용한다.
JS에서의 연산자는 C랑 조금 다른 성질이 있다. C에서의 ==
연산자는 좌변과 우변의 값과 자료형이 같아야 참을 반환하지만, JS에서의 ==
연산자는 좌변과 우변의 값만 같으면 참을 반환한다. 예를 들어
5 == '5'라는 조건문이 있다고 치면 C에서는 양변의 자료형이 다르기 때문에 오류를 출력할 것이지만, JS에서는 양변의 자료형은 달라도 값은 같기에 참을 반환한다. JS에서 자료형과 값이 모두 같음을 확인하기 위한 연산자는 ===
연산자로, 이 연산자는 자료형이 다르면 오류가 아닌 거짓을 반환한다.