본문 바로가기
개인공부/JavaScript

undefined & null

by 왕큰새 2020. 7. 29.
728x90

자바스크립트 엔진은 사용자가 어떤 값을 지정할 것이라고 예상되는 상황임에도 지정하지 않으면

undefined를 반환한다. 다음 세 경우가 해당된다.

 

1. 값을 대입하지 않은 변수, 즉 데이터 영역의 메모리 주소를 지정하지 않은 식별자에 접근할 때

 

2. 객체 내부의 존재하지 않는 프로퍼티에 접근하려고 할 때

 

3. return 문이 없거나 호출되지 않는 함수의 실행 결과

 

undefined 와 Array

var arr1 = [];
arr1.lenght = 3;
console.log(arr1); // [empty x 3]

var arr2 = new array(3);
console.log(arr2); // [empty x 3]

var arr3 = [undefined, undefined, undefined];
console.log(arr3); // [undefined, undefined, undefined]

이처럼 '비어있는 요소' 와 'undefined'를 할당한 요소는 출력 결과부터 다르다.

'비어있는 요소'는 순회와 관련된 많은 배열 메서드(forEach,map,filter,reduce) 들의 순회 대상에서 제외된다.

 

같은 의미를 가진 null이라는 값이 별도로 있는데 굳이 undefiend를 써야 할 이유가 없다. 

'비어있음'을 명시적으로 나타내고 싶을 때는 undefined가 아닌 null을 쓰자.

null은 애초부터 이런 용도로 만든 데이터 타입이다. 이런 규칙을 따르는 한 

undefined는 오직 '값을 대입하지 않은 변수에 접근하고자 할 때 자바스크립트 엔진이 반환해주는 값'으로서만 존재!

 

null 주의점

typeof null이 object 라는 점이다. 이는 자바스크립트 자체 버그이고, 따라서 어떤 변수의 값이 null인지 여부를 판별

하기 위해서는 typeof 대신 다른 방식으로 접근해야 한다. 

 

var n = null;
console.log(typeof n); // object

console.log(n == undefined); // true
console.log(n == null); // true

console.log(n === undefined) // false
console.log(n === null) // true

 

'개인공부 > JavaScript' 카테고리의 다른 글

hoisting(호이스팅)  (0) 2020.08.03
실행 컨텍스트(execution context)  (0) 2020.08.03
얕은 복사와 깊은 복사  (0) 2020.07.29
변수 복사 비교(기본형, 참조형)  (0) 2020.07.29
불변값 & 가변값  (0) 2020.07.27