변수 관련 포스팅에서 자세히 언급했다시피, var 키워드로 선언한 변수는 암묵적으로 undefined로 초기화된다.
=> 즉, 변수 선언에 의해 확보된 메모리 공간을 처음 할당이 이뤄질 때까지 빈 상태(대부분 쓰레기 값)로 내버려두지 않고, 자바스크립트 엔진이 undefined로 초기화한다.
7. null 타입
프로그래밍 언어에서 null은 변수에 값이 없다는 것을 '의도적으로8. 심벌 명시' 할 때 사용한다.
변수에 null을 할당
=> 변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미
=> JS엔진은 누구도 참조하지 않는 메모리 공간에 대해 가비지 콜렉션을 수행할 것이다.
8. 심벌 타입
심벌은 ES6에서 추가된 7번째 타입으로, 변경 불가능한 원시 타입의 값이다.
- 다른 값과 중복되지 않는 유일무이한 값.
- 주로 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용됨
심벌은 Symbol 함수를 호출해 생성한다.
//symbol 값 생성
var key = Symbol('key');
console.log(typeof key); //symbol
//객체 생성
var obj = {}
//이름이 충돌할 위험이 없는 유일무이한 값인 symbol을 프로퍼티 키로 사용
obj[key] = 'value'
console.log(obj[key]); //value
9. 데이터 타입이 필요한 이유
값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
값을 참조할 때 한 번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해
10. 정적 타입 언어와 동적 타입 언어
정적 타입 언어
C나 자바 같은 정적 타입 언어는 변수를 선언할 때 변수에 할당할 수 있는 데이터 타입을 사전에 선언해야 한다. ( 명시적 타입 선언)
변수의 타입을 변경할 수 없으며, 변수에 선언한 타입에 맞는 값만 할당 가능
컴파일 시점에 타입 체크를 수행 -> 체크를 통과하지 못하면, 에러를 발생시키고 프로그램 실행 x
ex) C,C++자바, 코틀린,고,하스켈,러스트,스칼라 등
동적 타입 언어
정적 타입 언어와 달리, 선언이 아닌 '할당'에 의해 타입이 결정된다. 또한, 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다.
typeof 연산자 -> 변수의 타입을 반환하는 것이 아닌, 변수에 할당된 '값'의 데이터 타입을 반환