자바스크립트의 모든 '
값
'은데이터 타입
을 갖는다. 데이터 타입은 값의 종류를 말하며 ES6는 7개의 데이터 타입을 제공한다. 크게원시 타입과 객체 타입
으로 분류할 수 있다. <Deep dive 11장 참고>
숫자 타입에서 추가적으로 세 가지 특별한 값
ECMAScript 숫자 타입의 값은 배정밀도 64비트 부동소수점 형식을 따른다. 정수만 표현하기 위한 데이터 타입이 따로 존재하지 않음. 정수, 실수, 2진수, 8진수, 16진수 리터럴은 모두 메모리에 배정밀도 64비트 부동소수점 형식의 2진수로 저장된다. 값을 참조하면 모두 10진수로 해석된다.
문자열을 따옴표로 감싸지 않으면 자바스크립트 엔진은 키워드나 식별자같은 토큰으로 인식한다. 자바스크립트의 문자열은 원시 타입이며, immutable value이다.
Template literal이라는 새로운 문자열 표기법이 ES6부터 도입되었다. 편리한 문자열 처리 기능을 제공한다. 템플릿 리터럴은 런타임에 일반 문자열로 변환되어 처리된다.
백틱
을 사용해 표현한다.
true or false 두가지 값
자바스크립트 엔진이 변수를 초기화 할 때 사용하는 값.
변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미.가비지 콜렉션을 수행함. 함수가 유효한 값을 반환할 수 없는 경우에 null 또는 undefined을 반환. null vs undefined
33장에서 다룰것
11장 원시 값과 객체의 비교에서 다룰것
메모리에 값을 저장하려면 먼저 확보해야 할
메모리 공간의 크기를 결정
해야 한다. 메모리 셀의 개수 (바이트 수)를 사용해야 낭비와 손실이 없이 값을 저장할 수 있는지 알아야 한다.
리터럴 100은 숫자 타입의 값으로 해석되고 8바이트의 메모리 공간에 2진수로 저장된다. 숫자 타입은 8바이트 단위로저장
된다.
마찬가지로 값을참조
할 때도 읽어 들여야 할 메모리 공간의 크기를 알아야 한다. 자바스크립트는 변수에 할당 된 값으로 변수의 데이터 타입을 인식한다.
또 메모리에서 읽어 들인 2진수를 어떻게해석
할지 결정해야 한다. 데이터 타입에 따라 숫자로 해석될 수도 문자열로 해석될 수도 있다.
js에서 변수는 데이터 타입을 가질까? 자바스크립트는 정적 타입 언어와 다르게 변수를 선언할 때 타입을 선언하지 않는다. 어떠한 데이터 타입의 값이라도 자유롭게 할당 가능. 자바스크립트에서는
값을 할당하는 시점에 변수의 타입이 동적으로 결정
되고 변수의 타입을 언제든지 변경 가능.
typeof
연산자로 변수를 연산하면 변수에 할당된 값의 데이터 타입을 반환 할 수 있다. typeof 연산자는 연산자 뒤에 위치판 피연산자의 데이터 타입을 '문자열
'로 반환한다.
var foo;
console.log(typeof foo); // undefined
foo = 3;
console.log(typeof foo); // number
foo = 'hello';
console.log(typeof foo); // string
foo = true;
console.log(typeof foo); // boolean
foo = null;
console.log(typeof foo); // object
foo = Symbol();
console.log(typeof foo); // symbol
foo = {};
console.log(typeof foo); // object
foo = [];
console.log(typeof foo); // object
foo = function(){};
console.log(typeof foo); // function