null과 undefined, undeclared 그리고 NaN

람다·2021년 6월 25일
0
post-thumbnail

unll, undefined, undeclared는 전부 변수에 값이 없다는 점을 나타낸다. 하지만 셋의 의미는 각각 다르다.

null

null은 의도적으로 변수에 null을 할당하여 값이 없다는 것을 나타낸다. Null이 할당된 변수의 타입을 확인해 보면 object인 것을 알 수 있다. 한마디로 타입은 객체이고 비어있는 변수이다.

let a = null;
console.log(a); // null
console.log(typeof a); //object

undefined (미정의 변수)

변수를 선언하고 값을 할당하기 전의 값이며 변수에 할당되어 있지 않은 상태이다. 타입이 결정되지 않은 변수이다.

let b;
console.log(b); //undefined
console.log(typeof b); //undefined 

위의 결과를 보면 타입이 정의되지 않았음을 알 수 있다.

undelared(미선언 변수)

접근 가능한 스코프에 변수 선언조차 되어있지 않은 상태이다. 타입을 확인해 보면 undefined이다.

console.log(b); //ReferenceError: b is not defined 
console.log(typeof b); //undefined 

미선언 변수 b의 typeof 결과로는 undefined를 뱉는다.
실제로 typeof는 undeclared인 경우에도 undefined를 뱉어 오류 처리를 내뱉지 않는다.

NaN

NaN는 Not a Number의 약어이다.
표현을 못하는 수치형 결과를 나타내며, 이 속성은 값이 유효한 숫자가 아니라는 것을 말한다. 즉, 컴퓨터로는 표현할 수 없는 숫자값이다.

let a = NaN;
console.log(a); //NaN
Console.log(typeof a); // number

undefined == null, undefined === null

console.log(undefined == null); //true 
console.log(undefined === null); //false

왜 비교연산자(==)는 자료형이 다르면 자료형을 강제로 맞춰서 비교하는 연산자이다.
Undefined와 null은 자료형이 다르니 강제로 맞춰서 값을 비교하면 둘다 값이 없으니 true가 된다.
하지만 ===연산자를 이용하면 자료형까지 비교하므로 false가 된다. null은 의도적으로 빈 값이 들어간 object이기 때문이다.

profile
오늘의 람다

0개의 댓글