리터럴(literal)과 변수(variable), 상수(const), 데어터 타입에 대해 알아 보자.
변수란 간단히 말해 이름이 붙은 값으로, 언제든 바뀔 수 있다.
let currentTempC = 22; // 섭씨온도
변수 currentTempC를 선언(할당) 하고 초기값을 할당한다.
currentTempC의 값은 언제든 바꿀 수 있다.
currentTempC = 22.5;
let은 변수 선언에만 쓰이고 각 변수는 한 번만 선언할 수 있다.
let targetTempC; console.log(targetTempC); // undefined
변수를 선언할 때 초기값을 할당하지 않으면 undefined가 할당된다.
const currentTempC = 22; currentTempC = 22.5 // error
상수도 변수와 마찬가지로 값을 할당받을 수 있지만, 한 번 할당한 값을 바꿀 수는 없다.
변수와 상수, 함수 이름을 식별자(identifier)라 부르고 식별자에는 규칙이 있다.
- 식별자는 반드시 글자나 달러 기호($), 밑줄(_)로 시작해야 한다.
- 식별자에는 글자와 숫자, 달러 기호, 밑줄만 쓸 수 있다.
- 유니코드 문자도 쓸 수 있다.
- 예약어는 실별자로 쓸 수 없다.
자바스크립트 식별자 표기법 중 가장 널리 쓰이는 방법은 다음과 같다.
- 카멜 케이스(camel case)
이름 중간중간의 대문자가 낙타의 혹처럼 생겼다고 하여 카멜 케이스로 불린다.
ex) currentTempC, anIdentifierName- 스네이크 케이스(snake case)
언더바가 뱀처럼 생겼다고 하여 스네이크 케이스로 불린다.
ex) current_temp_c, an_identifier_name
표기법은 무엇을 써도 상관없지만 일관성을 지켜야 한다.
리터럴은 값을 프로그램 안에서 직접 지정한다는 의미이고 값을 만드는 방법이다. 자바스크립트는 개발자가 제공한 리터럴 값을 받아 데이터를 만든다.
let room1 = "conference_room_a"; // "conference_room_a" (따옴표 안)은 리터럴
위의 코드의 경우 room1이 변수를 가리키는 식별자이고 "conference_room_a"은 문자열 리터럴인 동시에 room1의 값이다.
자바스크립트의 값은 원시 값(primitive) 또는 객체(object)이다.
원시 타입은 불변(immutable)이고 원시 타입에는 여섯 가지가 있다.
- 숫자
- 문자열
- 불리언
- null
- undefined
- 심볼(Symbol)
원시 타입 외에 객체가 있고 원시 값과 달리 객체는 여러 가지 형태와 값을 가질 수 있다.
- Array
- Date
- RegExp
- Map, WeakMap
- Set, WeakSet
자바스크립트는 실제 숫자의 근사치를 저장할 떄 IEEE-764 배정도(double-precision) 부동소수점 숫자 형식을 사용한다.
자바스크립트는 다른 언어와 다르게 숫자형 데이터 타입이 하나밖에 없다.
자바스크립트는 10진수, 2진수, 8진수, 16진수의 네 가지 숫자형 리터럴을 인식한다.
자바스크립트 문자열은 유니코드(Unicode) 텍스트이다.
유니코드는 텍스트 데이터에 관한 표준이며 모든 언어의 텍스트를 나타낼 수 있다.
자바스크립트의 문자열 리터럴에는 작은따옴표, 큰따옴표, 백틱(backtick)을 사용한다.
불리언은 true와 false 두 가지 값밖에 없는 데이터 타입이다.
모든 값을 참 같은 값(truthy), 거짓 같은 값(falsey)으로 나눌 수 있다.
불리언을 쓸 경우 따옴표 안에 넣지 않도록 조심해야 하고 문자열 "false"는 참 값은 값이다.
심볼(Symbol)은 유일한 토큰을 나타내기 위해 ES6에 추가된 데이터 타입이다. 심볼은 항상 유일하고 그렇기 때문에 어떤 심볼과도 일치하지 않는다.
const RED = Symbol("The color of a sunset!"); const ORANGE = Symbol("The color of a sunset!"); RED === ORANGE // false
다른 식별자와 혼동해서는 안 되는 고유한 식별자가 필요할 경우 심볼을 사용하면 된다.
null과 undefined는 자바스크립트의 특별한 타입이고 둘 다 존재하지 않는 것을 나태낸다.
일반적인 규칙은 null은 프로그래머에게 허용된 데이터 타입이고 undefined는 자바스크립트 자체에서 사용한다.
객체는 여러 가지 값이나 복잡한 값을 나타낼 수 있으며, 변할 수도 있다.
객체의 본질은 컨테이너이다. 컨테이너의 내용물은 바뀔 수 있지만, 내용물이 바뀐다고 컨테이너가 바뀌는 건 아니다. 즉, 여전히 같은 객체이다.
객체의 콘텐츠는 프로퍼티(property) 라고 부르고 프로퍼티는 이름(키)과 값으로 구성된다. 이름은 반드시 문자열이나 심볼이어야 하며, 값은 어떤 타입이든 상관없다.
프로퍼티 이름이 유효한 식별자일 경우 점 연산자(.)를 사용할 수 있고 이름이 유효한 식별자가 아닐 경우에는 꼭 대괄호([])를 써야 한다.
const sam1 = { name : 'Sam', age : 4 }; const sam2 = { name : 'Sam', age : 4 }; console.log(sam1.name === sam2.name) // true 같은 원시 값을 가리킴 console.log(sam1 === sam2) // false
sam1과 sam2의 프로퍼티는 똑같지만, 둘은 서로 다른 객체이다.
숫자와 문자열, 불리언에는 각각 대응하는 객체 타입 Number, String, Boolean이 있다. 이 객체들은 특별한 값을 저장할수 있고 함수 형태로 기능을 제공한다.
const s = "hello"; s.toUpperCase(); // "HELLO"
s가 객체처럼 함수 프로퍼티를 가진 것처럼 보인다. s는 문자열 타입인데 이게 가능한 이유는 자바스크립트가 일시적인 String 객체를 만들고 이 임시 객체에
toUpperCase 함수가 들어있기 때문이다.
임시 객체는 함수를 호출하는 즉시 파괴된다.
배열은 특수한 객체이고 일반적인 객체와 달리 배열 콘텐츠에는 항상 순서가 있다.
자바스크립트의 키는 순차적인 숫자이고 다음과 같은 특징이 있다.
- 배열 크기는 고정되지 않는다. 언제는 요소를 추가하고 제거할 수 있다.
- 요소의 데이터 타입을 가리지 않는다.
- 배열의 요소는 0으로 시작한다.