728x90
undefined
- undefined는 사용자가 명시적으로 지정할 수도 있지만 값이 존재하지 않을 때 자바스크립트 엔진이 자동으로 부여하는 경우도 있다.자바스크립트 엔진은 사용자가 응당 어떤 값을 지정할 것이라고 예상되는 상황임에도 실제로는 그렇게 하지 않았을 때 undefined를 반환
- 값을 대입하지 않은 변수, 즉 데이터 영역의 메모리 주소를 지정하지 않은 식별자에 접근 할 때,
- 객체 내부의 존재하지 않는 프로퍼티에 접근하려고 할 때
- 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
'cs 지식 > 코어 자바스크립트' 카테고리의 다른 글
[코어 자바스크립트] this(1) (1) | 2022.12.15 |
---|---|
[코어자바스크립트] 얕은 복사와 깊은 복사 (0) | 2022.05.31 |
[코어 자바스크립트] 불변 객체 (0) | 2022.05.31 |