참고 :
https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Grammar_and_types
https://developer.mozilla.org/ko/docs/Web/JavaScript/Data_structures
이 문서에서 말하는 '자료형'을 '변수'와 헷갈려서는 안 된다. 자바스크립트의 변수는 자료형에 관계없이 모든 데이터를 담을 수 있다. 변수는 어떤 순간에 문자열일 수 있고 다른 순간에는 숫자일 수 있다.
JavaScript는 문법의 대부분을 Java와 C, C++로부터 차용하며, Awk, Perl, Python의 영향도 받았다.
JavaScript는 대소문자를 구별하며 유니코드 문자셋을 이용하므로 한글 변수 선언도 가능하다.
JavaScript는 느슨한 타입 (loosely typed) 언어, 혹은 동적 (dynamic) 언어이다. 그 말은, 변수의 타입을 미리 선언할 필요가 없다는 뜻이다. 타입은 프로그램이 처리되는 과정에서 자동으로 파악될 것이다. 또한 그 말은 같은 변수에 여러 타입의 값을 넣을 수 있다는 뜻이다.
최신 ECMAScript 표준은 다음과 같은 7개의 자료형을 정의한다.
Undefined : 값을 할당하지 않은 변수. 일시적 사각지대(Temporal Dead Zone; TDZ)에서 할당됨. Hoisting 개념과 연계.
String : C 같은 언어와는 다르게, 자바스크립트의 문자열은 변경 불가능 (immutable) 하다. 이것은 한 번 문자열이 생성되면, 그 문자열을 수정할 수 없다는걸 의미한다. 그러나 원래 문자열에서 일부가 수정된 다른 문자열을 만드는건 가능하다. String.substr(), String.concat() 등으로.
규칙만 잘 정의해놓는다면, 어떤 자료구조가 되던 문자열로 표시할 수 있다. 그렇다고 해서 이게 좋은 방법이 되는 건 아니다. 예를 들자면, 구분자로 리스트 자료형을 흉내낼 수 있을 것이다 (하지만 자바스크립트의 배열을 사용하는게 더 알맞을 것이다). 불행하게도, 리스트의 요소중에 구분자가 들어있는 요소가 있다면 리스트는 엉망진창이 될 것이다. 물론 탈출 문자 (escape character) 등을 사용하거나 할 수도 있을 것이다. 하지만 이런 것들은 모두 미리 정해놓은 규칙을 필요로 하고, 덕분에 불필요한 관리 부담을 낳는다.
Symbol : Symbol 은 ECMAScript 6 에서 추가되었다. Symbol은 유일하고 변경 불가능한 (immutable) 기본값 (primitive value) 이다. 또한, 객체 속성의 key 값으로도 사용될 수 있다 (아래를 볼 것). 몇몇 프로그래밍 언어에서는 Symbol을 atom 이라고 부른다. 또, C 언어의 이름있는 열거형 (enum) 과도 비슷하다.
Object : 객체는 데이터 컬렉션이나 복잡한 개체(entity)를 표현할 수 있다. 자바스크립트에서, 객체는 속성들을 담고있는 가방 (collection) 으로 볼 수 있다. 속성 값은 객체를 포함해 어떠한 자료형도 될 수 있고, 그 덕분에 복잡한 데이터 구조를 형성하는게 가능해진다. 속성은 키 (key) 값으로 식별된다. 키 값은 String 이거나 Symbol 값이다.
Dates : 시간을 나타내려면 Date utility를 사용한다.
Arrays : 배열(Arrays) 는 정수키를 가지는 일련의 값들을 표현하기 위한 오브젝트이다. 배열 오브젝트에는 길이를 나타내는 'length'란 속성도 있다. 배열은 Array.prototype을 상속받으므로 배열을 다룰 때 편한 indexOf (배열에서 값 검색)와 push (새로운 값 추가) 같은 함수를 사용할 수 있다. 배열은 리스트나 집합을 표현하는데 적합하다.
Infinite 개념이 추가되어 division by 0 문제로 프로그램이 정지하지 않게 되었다.
작은따옴표와 큰따옴표에 차이를 두지 않는다.
역 따옴표로 변수나 표현식을 감싼 후 ${…}안에 넣어주면, 아래와 같이 원하는 변수나 표현식을 문자열 중간에 손쉽게 넣을 수 있다.
alert( `Hello, ${name}!` );