cs 지식/코어 자바스크립트

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

귤먹는코더 2022. 6. 9. 10:53
728x90

undefined

  • undefined는 사용자가 명시적으로 지정할 수도 있지만 값이 존재하지 않을 때 자바스크립트 엔진이 자동으로 부여하는 경우도 있다.자바스크립트 엔진은 사용자가 응당 어떤 값을 지정할 것이라고 예상되는 상황임에도 실제로는 그렇게 하지 않았을 때 undefined를 반환
  1.  값을 대입하지 않은 변수, 즉 데이터 영역의 메모리 주소를 지정하지 않은 식별자에 접근 할 때,
  2. 객체 내부의 존재하지 않는 프로퍼티에 접근하려고 할 때
  3. return 문이 없거나 호출되지 않는 함수의 실행 결과

undefined과 배열

var arr1 = []
arr1.length = 3;
console.log(arr1);         //[empty x3]

var arr2 = new Array(3);
console.log(arr2);         //[empty x3]

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

'비어있는 요소'와 'undefined를 할당한 요소'는 출력 결과부터 다르다. '비어 있는 요소'는 순회와 관련된 많은 배열 매서드들의 순회 대상에서 제외된다.

 

빈 요소와 배열의 순회

var arr1 = [undefined, 1];
var arr2 = [];
arr2[1] = 1;

arr1.forEach(function(v, i) { console.log(v, i); });    	// undefined 0 / 1 1
arr2.forEach(function(v, i) { console.log(v, i); });    	// 1 1

arr1.map(function(v, i) {return v + i});             // [NaN, 2]
arr2.map(function(v, i) {return v + i});             // [empty, 2]

arr1.filter(function(v) {return !v;});               // [undefined]
arr2.filter(function(v) {return !v;});               // []

arr1.reduce(function (p, c, i) { return p + c + i;}, '');	//undefined011
arr2.reduce(function (p, c, i) { return p + c + i;}, '');	// 11
  • arr1에 대해서는 일반적으로 알고 있는 대로 배열의 모든 요소를 순회해서 결과를 출력, 그러나 arr2는 비어 있는 요소에 대해서는 어떠한 처리도 하지 않고 건너뜀!
  • 값이, 지정되지 않은 인덱스는 '아직은 존재하지 않는 프로퍼티'에 지나지 않다.
  • undefined가 비록 '비어있음'을 의미하긴 하지만 하나의 값으로 동작하기 때문에 이때의 프로퍼티나 배열의 요소는 고유의 키값(프로퍼티 이름)이 실존하게 되고, 따라서 순회 할 수 있다.

 

정리

직접 undefined를 할당하지 않으면 된다, null로 할당해라~

undefined는 컴퓨터가 할당하는 것이니 손대지마라 ~

 

728x90