자바스크립트에서는 없음을 나타내는 두 가지 값이 있다.
undefined와 null. 이 두 가지는 같은 것 같지만 미세하게 다르고,
사용 목적 또한 다르다.
undefined
: 사용자가 명시적으로 지정할 수도 있지만 값이 존재하지 않을 때 자바스크립트 엔진이 자동으로 부여하기도 한다.
자바스크립트 엔진은 사용자가 응당 어떤 값을 지정할 것이라고 예상되는 상황임에도 실제로는 그렇게 하지 않았을 때 undefined를 반환한다.
- 값을 대입하지 않은 변수, 데이터 영역의 메모리 주소를 지정하지 않은 식별자에 접근할 때
- 객체 내부의 존재하지 않는 프로퍼티에 접근하려고 할때
- return 문이 없거나 호출되지 않는 함수의 실행 결과
사용자가 명시적으로 부여한 경우와 비어있는 요소에 접근하려 할 때 반환되는 undefined의 두 의미는 구분될 수 있다.
전자의 경우, 그 자체로 undefined가 값이다.
비록 비어있음을 의미하기는 하지만, 이때 프로퍼티나 배열의 요소는 고유의 키값(프로퍼티 이름)이 실존하게 되고, 순회의 대상이 될 수 잇다.
후자의 경우, 해당 프로퍼티 내지 배열의 키값이 존재하지 않음을 의미한다.
값으로써 어딘가에 할당된 undefined는 실존하는 데이터인 반면, 자바스크립트 엔진이 반환해주는 undefined는 문자 그대로 값이 없음을 나타내는 것이다.
이 혼란을 피하는 방법으로는, 둘 중 하나만을 사용하는 방법이 있다.
자바스크립트 엔진이 반환하는 경우가 우리의 통제 범위를 벗어나니, 이 경우만 해당하게끔 해주는 것이다.
다시말해, 직접 undefined값을 할당하지 않는 것을 의미한다.
null
같은 의미인 null이 있는데 굳이 undefined를 사용할 이유는 없다.
비어있음을 명시적으로 나타내고 싶을 때 null을 사용하면 된다.
(애초부터 이런 의미로 만든 데이터 타입이다.)
한 가지 주의할 점은, typeof null이 object라는 것이다.
(이는 자바스크립트 자체의 버그이다.)
따라서 어떤 변수의 값이 null인지의 여부를 판단하기 위해서는 typeof 대신 동등 연산자(===)를 사용하여 정확히 판별할 수 있다.
'자바스크립트 공부하기' 카테고리의 다른 글
[코어자바스크립트] 02.실행 컨텍스트 (0) | 2021.05.13 |
---|---|
[코어자바스크립트] 1단원 정리 (0) | 2021.05.11 |
[코어자바스크립트] 5.불변 객체 (0) | 2021.05.11 |
[코어자바스크립트] 4.기본형 데이터와 참조형 데이터 (0) | 2021.05.11 |
[코어자바스크립트] 3.변수 선언과 데이터 할당 (0) | 2021.05.11 |