두 단어 모두 없음을 나타내는 값이지만 사용과 목적이 다르다.
- undefined
- 개발자가 직접 지정할 수도 있지만 일반적으로는 JS에서 값이 있어야 할 것 같은데 없는 경우, 자동으로 부여합니다.
- 변수에 값이 지정되지 않은 경우, 데이터 영역의 메모리 주소를 지정하지 않은 식별자에 접근할 때
- .이나 []로 접근하려 할 때, 해당 데이터가 존재하지 않는 경우
- return 문이 없거나 호출되지 않는 함수의 실행 결과
- 개발자가 직접 지정할 수도 있지만 일반적으로는 JS에서 값이 있어야 할 것 같은데 없는 경우, 자동으로 부여합니다.
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인것은 오래전 부터 내려온 초기 설계의 실수가 주요 원인이다.
- JS는 초기에 null은 특별히 object 타입을 가리키는 null 객체 포인터로 설계되었습니다. 즉, null은 원래 null객체 라는 것을 나타내는 의도로 설계되었고, 이는 첫 번째 비트가 0으로 설정되어 object로 식별되게 되었습니다.
- 하지만 , null은 실제로는 아무런 값을 참조하지 않는 포인터여야 했기 때문에, null의 타입을 object로 인식하는 것이 불필요하게 혼란을 초래했습니다.
- 현재의 상황 : ECMAScript 표준에 따르면 null은 아무런 객체도 가리키지 않는 특수한 값입니다. 그러나 typeof null이 object를 반환하는 표준이 변경되지 않았기 때문에 여전히 남아있는 초기 설계상의 유물입니다.
- 버그인가 ???? : 엄밀히 말하면 null의 타입이 object로 나타나는 것은 초기 설계의 실수로 인해 발생한 비정상적인 현상입니다. 하지만 이는 JS역사와 표준의 일관성을 유지하기 위해 의도적으로 변경되지 않은 상태로 남아 있습니다.
- 대응 방법 : 이로 인해 실제 개발에서는 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 |