관리 메뉴

Bbaktaeho

[Javascript] undefined, empty, null ( 비어있는 변수, 리턴없는 함수, 배열의 빈 공간) 본문

프로그래밍 (Programming)/자바스크립트 (JavaScript)

[Javascript] undefined, empty, null ( 비어있는 변수, 리턴없는 함수, 배열의 빈 공간)

Bbaktaeho 2020. 3. 30. 17:56
반응형

📚 자바스크립트 빈 공간

  • undefined, null, empty ..

📗 undefined

비어있다는 의미

  • 자바스크립트에서 기본형 데이터 타입에 속함

  • 사용자가 명시적으로 지정하지 않으면 비어있는 요소에 접근했을 시에 자바스크립트 엔진(V8)에서 undefined를 부여함

  • 값을 대입하지 않은 변수일 때

    var v1 = undefined; // 명시적으로 undefinded 지정
    var v2; // 아무런 데이터를 할당하지 않음
    
    console.log(v1);
    console.log(v2);
    undefined
    undefined
  • 객체에 존재하지 않는 속성에 접근할 때

    var obj = {
      a: "test1",
      b: "test2"
    };
    
    console.log(obj.a);
    console.log(obj.b);
    console.log(obj.c);
    test1
    test2
    undefined
  • return이 없는 함수를 호출할 때

    function f(a, b) {
      var result = a + b;
    }
    
    var result = f(10, 20);
    console.log(result);
    undefined

📒 empty

비어있는 배열을 할당할 때는 undefined가 아닌 empty가 지정됨

  • 크기가 주어진 빈 배열을 선언할 때

    var arr = new Array(5);
    console.log(arr);
    [ <5 empty items> ]
  • 빈 배열을 순회했을 때 (forEach)

    안 함 new Array(5);
    var arr2 = [undefined, undefined, undefined, undefined];
    var arr3 = [];
    arr3[3] = "hi";
    
    arr1.forEach(function(e, i) {
      // 완전히 비었을 때 순회조차 안함
      console.log(e, i);
    });
    
    arr2.forEach(function(e, i) {
      console.log(e, i);
    });
    
    arr3.forEach(function(e, i) {
      console.log(e, i);
    });
    undefined 0
    undefined 1
    undefined 2
    undefined 3
    hi 3
  • 빈 배열을 순회했을 때 (map)

    것뿐임 new Array(5);
    var arr2 = [undefined, undefined, undefined, undefined];
    var arr3 = [];
    arr3[3] = "hi";
    
    var result1 = arr1.map(function(e, i) {
      // 순회한 것처럼 보이지만 새로운 빈 배열을 리턴하는 것 뿐임
      return e;
    });
    
    var result2 = arr2.map(function(e, i) {
      return e;
    });
    
    var result3 = arr3.map(function(e, i) {
      return e;
    });
    
    console.log(result1);
    console.log(result2);
    console.log(result3);
    [ <5 empty items> ]
    [ undefined, undefined, undefined, undefined ]
    [ <3 empty items>, 'hi' ]
    • undefined가 아닌 empty 배열에서 메서드들이 비어 있는 요소에 대해서 어떠한 처리도 안 했음

    • undefined는 비어있음을 의미하지만 값으로 인식하여 동작하기 때문에 순회의 대상이 됨. 이상하게 비어있다고 의미를 가지지만 자신이 값으로 존재한다는 것, 또한 자바스크립트 엔진에서 비어있는 식별자에게 접근할 시 자바스크립트 엔진이 자동으로 undefined를 할당하니 개발자가 명시적으로 undefined를 지정할 경우 혼란이 올 수 있음


📘 null

undefined 와 같은 의미를 가짐

  • 명시적으로 비어있다고 의미를 부여할 때

    var v = null;
    
    // 둘은 동등함
    console.log(v == undefined);
    console.log(v == null);
    
    // 실제 판단을 위해서는 identity operator를 사용함
    console.log(v === undefined);
    console.log(v === null);
    true
    true
    false
    true
    • 비어있다를 명시하기 위해서 혼란을 피해 null 사용
반응형