자바스크립트 입문_undefined와 null
자바스크립트 2021. 5. 3. 15:51(본 포스팅은 위키북스의 '코어자바스크립트' 책을 공부하면서 작성되었습니다_내돈내산)
- undefined : 사용자의 명시적지정 or 자바스크립트엔진의 자동부여
1) 값을 대입하지 않은 변수, 즉 데이터 영역의 메모리 주소를 지정하지 않은 식별자에 접근할 때
2) 객체 내부의 존재하지 않는 프로퍼티에 접근하려고 할때
3) return 문이 없거나 호출되지 않는 함수의 실행 결과
<빈 요소와 배열의 순회>
var arr1 = [undefined, 1];
var arr2 = [];
arr2[1] = 1;
arr1.forEach(function(v,i) {console.log(v,i);}); //undefined 0 \n 1 1
arr2.forEach(function(v,i) {console.log(v,i)}); // 1 1
console.log(arr1.map(function(v,i) {return v + i;})) // [NaN, 2]
console.log(arr2.map(function(v,i) {return v + i;})) // [empty, 2]
console.log(arr1.filter(function(v) {return !v;})); // [undefined]
console.log(arr2.filter(function(v) {return !v;})); // []
console.log(arr1.reduce(function(p,c,i) {return p+c+i;}, '')); // undefined011
console.log(arr2.reduce(function(p,c,i) {return p+c+i;}, '')); // 11
- 사용자가 직접 undefined를 할당한 arr1에 대해서는 일반적으로 알고 있는 대로 배열의 모든 요소를 순회해서 결과를 출력함. 그러나 arr2에 대해 결과를 보면 각 메서드들이 비어 있는 요소에 대해서는 어떠한 처리도 하지 않고 건너뛰었음을 알 수 있음.
- 이를통해 알수 있는 것은 자바스크립트가 빈공간확보 >> 인덱스의 지정 >> 데이터의 주솟값 저장 의 순서로 일하고 있음을 알 수 있음.
- 사용자가 할당한 undefined는 값으로 인식해 고유의 키값이 실존하게 되지만, 사용자가 아무것도 하지않았을때의 undefined는 해당 프로퍼티 또는배열의 기값 자체가 존재하지 않음을 의미함.
- 혼란을 없애기위해 사용자가 명시적으로 undefined를 할당하는 행위는 지양하는것이 좋다.
- null : 비어있음을 명시적으로 나타내고 싶을때 사용하는 것. 굳이 undefined를 쓸 필요가 없다. (typeof를 이용해 찍어봤을때 자료형은 object로 반환됨 >> 자바스크립트의 버그) 그래서 null의경우는 동등연산자(==)로 비교할경우 비교가 안될때가 있다. 반드시 일치연산자(===)를 써서 비교하도록 하자
var n = null;
console.log(typeof n); // object
console.log(n == undefined); // ture
console.log(n == null); //ture
console.log(n === undefined); //false
console.log(n === null); // true
'자바스크립트' 카테고리의 다른 글
자바스크립트 입문_LexicalEnvironment, 호이스팅(hoisting) (0) | 2021.05.04 |
---|---|
자바스크립트 입문_스택(stack)과 큐(queue)(실행컨텍스트) (0) | 2021.05.03 |
자바스크립트 입문_얕은복사와 깊은복사 (0) | 2021.05.03 |
자바스크립트 입문_불변객체 (0) | 2021.05.03 |
자바스크립트 입문_변수의 복사 (0) | 2021.05.03 |