자바스크립트 입문_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
admin