본문 바로가기
개발/JavaScript

[JS] undefined 와 null

by WaDDak 2024. 8. 20.

두 단어 모두 없음을 나타내는 값이지만 사용과 목적이 다르다.

 

  1. undefined
    • 개발자가 직접 지정할 수도 있지만 일반적으로는 JS에서 값이 있어야 할 것 같은데 없는 경우, 자동으로 부여합니다. 
      1. 변수에 값이 지정되지 않은 경우, 데이터 영역의 메모리 주소를 지정하지 않은 식별자에 접근할 때
      2. .이나 []로 접근하려 할 때, 해당 데이터가 존재하지 않는 경우
      3. return 문이 없거나 호출되지 않는 함수의 실행 결과
var a;
console.log(a); // (1) 값을 대입하지 않은 변수에 접근

var obj = { a: 1 };
console.log(obj.a); // 1
console.log(obj.b); // (2) 존재하지 않는 property에 접근
// console.log(b); // 오류 발생

var func = function() { };
var c = func(); // (3) 반환 값이 없는 function
console.log(c); // undefined

 

 

2. null 

  • 용도 : 없다를 명시적으로 표현할 때
  • 주의 : typeof null   ===  null의 데이터 타입이 object인것은 오래전 부터 내려온 초기 설계의 실수가 주요 원인이다.
    1. JS는 초기에 null은 특별히 object 타입을 가리키는 null 객체 포인터로 설계되었습니다.  즉, null은 원래 null객체 라는 것을 나타내는 의도로 설계되었고, 이는 첫 번째 비트가 0으로 설정되어 object로 식별되게 되었습니다.
    2. 하지만 , null은 실제로는 아무런 값을 참조하지 않는 포인터여야 했기 때문에, null의 타입을 object로 인식하는 것이 불필요하게 혼란을 초래했습니다.
    3. 현재의 상황 : ECMAScript 표준에 따르면 null은 아무런 객체도 가리키지 않는 특수한 값입니다. 그러나 typeof null이 object를 반환하는 표준이 변경되지 않았기 때문에 여전히 남아있는 초기 설계상의 유물입니다.
    4. 버그인가 ???? : 엄밀히 말하면 null의 타입이 object로 나타나는 것은 초기 설계의 실수로 인해 발생한 비정상적인 현상입니다. 하지만 이는 JS역사와 표준의 일관성을 유지하기 위해 의도적으로 변경되지 않은 상태로 남아 있습니다.
    5. 대응 방법 : 이로 인해 실제 개발에서는 null체크를 할때 typeof 연산자를 사용하는 것이 아니라, 다음과 같은 방식으로 직접 null 여부를 확인하는 것이 일반적입니다.
let value = null;

if (value === null) {
    console.log("The value is null");
}

console.log(typeof value);  // 출력: "object"

 

'개발 > JavaScript' 카테고리의 다른 글

[JS] 문자열 string 메서드  (0) 2024.09.06
[JS] Map 의 메서드 정리  (0) 2024.08.27
[JS] 가비지 콜렉터(Garbage Collecto)  (0) 2024.08.20
[JS] 데이터 타입의 종류  (0) 2024.08.20
[JS] Map과 Set  (0) 2024.08.13