본문 바로가기

자바스크립트 공부하기

[코어자바스크립트] 6.undefined와 null

자바스크립트에서는 없음을 나타내는 두 가지 값이 있다. 

undefined와 null. 이 두 가지는 같은 것 같지만 미세하게 다르고,

사용 목적 또한 다르다.

 

undefined

: 사용자가 명시적으로 지정할 수도 있지만 값이 존재하지 않을 때 자바스크립트 엔진이 자동으로 부여하기도 한다. 

자바스크립트 엔진은 사용자가 응당 어떤 값을 지정할 것이라고 예상되는 상황임에도 실제로는 그렇게 하지 않았을 때 undefined를 반환한다. 

  • 값을 대입하지 않은 변수, 데이터 영역의 메모리 주소를 지정하지 않은 식별자에 접근할 때
  • 객체 내부의 존재하지 않는 프로퍼티에 접근하려고 할때
  • return 문이 없거나 호출되지 않는 함수의 실행 결과

사용자가 명시적으로 부여한 경우와 비어있는 요소에 접근하려 할 때 반환되는 undefined의 두 의미는 구분될 수 있다.

전자의 경우, 그 자체로 undefined가 값이다.

비록 비어있음을 의미하기는 하지만, 이때 프로퍼티나 배열의 요소는 고유의 키값(프로퍼티 이름)이 실존하게 되고, 순회의 대상이 될 수 잇다.

후자의 경우, 해당 프로퍼티 내지 배열의 키값이 존재하지 않음을 의미한다. 

값으로써 어딘가에 할당된 undefined는 실존하는 데이터인 반면, 자바스크립트 엔진이 반환해주는 undefined는 문자 그대로 값이 없음을 나타내는 것이다.

 

이 혼란을 피하는 방법으로는, 둘 중 하나만을 사용하는 방법이 있다.

자바스크립트 엔진이 반환하는 경우가 우리의 통제 범위를 벗어나니, 이 경우만 해당하게끔 해주는 것이다.

다시말해, 직접 undefined값을 할당하지 않는 것을 의미한다.

 

null

같은 의미인 null이 있는데 굳이 undefined를 사용할 이유는 없다. 

비어있음을 명시적으로 나타내고 싶을 때 null을 사용하면 된다.

(애초부터 이런 의미로 만든 데이터 타입이다.)

 

한 가지 주의할 점은, typeof null이 object라는 것이다. 

(이는 자바스크립트 자체의 버그이다.)

따라서 어떤 변수의 값이 null인지의 여부를 판단하기 위해서는 typeof 대신 동등 연산자(===)를 사용하여 정확히 판별할 수 있다.