null과 undefined를 다른 값들과 비교할 땐 예상치 못한 일들이 발생한다.
===
을 사용하여 null과 undefined 비교두 값간의 자료형이 다르기 때문에 일치 비교 시 false가 반환된다.
alert(null === undefined); // false
alert(null == undefined); // true
null과 undefined는 숫자형으로 변환된다.
null
은0
,undefined
는NaN
으로 변환된다.
alert(null > 0); // (1) false alert(null == 0); // (2) false alert(null >= 0); // (3) true
- (3)에서
null
은 0보다 크거나 같다고 했기 때문에, (1)이나 (2) 중 하나는true
여야 하는데 둘 다false
를 반환하고 있다.이런 결과가 나타나는 이유는 동등연산자
==
와 기타 비교 연산자<
,>
,<=
,>=
의 동작 방식이 다르기 때문이다.
- (1)에서는 거짓을, (3)에서는 참을 반환하는 이유는 null이 숫자형으로 변형돼 0이 되기 때문이다.
- 그런데 동등 연산자
==
는 피연산자가undefined
나null
일 때 형 변환을 하지 않는다.undefined와 null을 비교하는 경우
에만true
를 반환하고, 그 이외의 경우(null이나 undefined를 다른 값과 비교할 때)는 무조건false
를 반환한다. 따라서 (2)는 거짓.
undefined
를 다른 값과 비교해서는 안된다.alert( undefined > 0 ); // (1) false alert( undefined < 0 ); // (2) false alert( undefined == 0 ); // (3) false
이런 결과가 나타나는 이유?
- (1)과 (2)에선
undefined
가NaN
으로 반환되는데(숫자형으로 변환),NaN
이 피연산자인 경우 비교 연산자는 항상false
를 반환한다.- undefined는 null이나 undefined와 같고, 그 이외의 값과는 같지 않기 때문에 (3)은 false를 반환한다.