06.3. undefined, null, 심벌, 객체 타입
undefined 타입
undefined타입의 값은 undefined가 유일하다. var키워드로 선언한 변수는 암묵적으로 undefined
로 초기화된다. 즉, 변수 선언에 의해 확보된 메모리 공간을 처음 할당이 이뤄질 때까지 빈 상태(대부분 비어 있지 않고 쓰레기 값)이 들어 있다. 내버려 두지 않고 자바스크립트 엔진인 undefined
로 초기화한다. 따라서, 변수를 선언한 이후 값을 할당하지 않은 변수를 참조하면 undefined
가 반환된다.
이처럼 undefined는 개발자가 의도적으로 할당하기 위한 값이 아닌, 자바스크립트 엔진이 변수를 초기화
할 때, 사용하는 값이다. 변수를 참조하였는데 undefined
가 반환된다면, 해당 변수는 선언한 이후 할당이 되지 않은 것이다.
자바스크립트 엔진이 변수를 초기화하는데, 사용하는 undefined
를 개발자가 의도적으로 변수에 할당한다면 undefined의 본래의 취지와도 어긋날뿐더러 혼란을 줄 수 있으므로, 권장하지 않는다.
Key Point💡
변수에 값이 없다는 것을 명시하고 싶다면?
undefined
대신null
을 할당한다.
참고) 선언(declaration)과 정의(definition)
undefined를 직역하면
정의되지 않은
이다. 일반적으로 정의란 개념은 어떤 대상을 명확하게 구정하는 것을 의미한다. 자바스크립트에서 말하는 정의란, 값을 할당하여 변수의 실체를 명확히 하는 것을 말한다. 자바스크립트의 경우 변수를 선언하면 암묵적으로 정의가 이뤄지기 때문에(예: undefined) 선언과 정의의 구분이 모호하다. 보통 ECMAScript사양에서 변수는 '선언한다'라고 표현하고, 함수는 '정의한다'라고 표현한다.
null 타입
null 타입의 값은 null이 유일하다. 자바스크립트는 대소문자를 구별하므로, null은 Null, NULL등 과 다르다. 프로그래밍 언어에서 null
은 변수에 값이 없다는 것을 의도적으로 명시(의도적 부재)할 떄, 사용한다. 변수에 null
을 할당하느 ㄴ것은 변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미이다. 이는 이전에 할당되어 있던 값에 대한 참조를 명시적으로 제거하는 것을 으미하며, 자바스크립트 엔진은 누구도 참조하지 않는 메모리 공간에 대해 가비지 콜렉션을 수행항 것이다.
Key Point💡
함수가 유효한 값을 반화할 수 없는 경우 명시적으로
null
을 반환하도록 한다.
예를 들어 HTML요소를 검색해 반환하는 document.querySelector 메서드는 조건에 부합하는 HTML요소를 검색할 수 없는 경우 에러 대신 null을 반환한다.
심벌 타입
ES6에서 추가된 7번째 타입으로 변경이 불가능한 원시 타입의 값이다. 심벌 값은 다른 값과 중복되지 않는 유일무이한 값이다.따라서, 주로 충돌의 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용한다.
심벌 이외의 원시 타입 값은 리터럴을 통해 생성하지만 심벌은 Symbol
함수를 호출해 생성한다. 이때 생성된 심벌 값은 외부에 노출되지 않으며, 다른 값과 절대 중복되지 않는 유일무이한 값이다.
객체 타입
자바스크립트의 데이터 타입은 크게 원시 타입
과 객체 타입
으로 구분된다. 자바스크립트는 객체 기반의 언어이며, 자바스크립트를 이루고 있는 거의 모든 것이 객체이다.
요약
undefined타입의 값은 undefined가 유일하다.
변수를 선언하고 할당하지 않은 상태로 참조할 경우 undefined가 반환이 된다. (var, let의 경우)
변수에 값이 없다는 것을 명시하고 싶다면?
undefined
대신null
을 할당한다.
Last updated