JS의 연산자를 공부하다가, 흥미로운 내용을 발견했다. 바로 NaN과 NaN을 동등, 일치 비교할 경우, 값이 'False'가 된다는 사실이었다.
분명 같은 값일 텐데, 왜 False가 나오는 걸까? 지금부터 NaN에 대해서 알아보자.
- 전역 속성으로, Not a Number, 즉 '숫자가 아니다' 라는 의미를 가진다.
NaN을 반환하는 연산에는 5가지가 있다.
(parseInt("어쩌구"), Number(undefined))
(Math.sqrt(-1))
(7 ** NaN)
(0 * Infinity)
("가" / 3)
x === y
를 비교한다고 할 때, x가 NaN이면 False를, y가 NaN이면 False를 반환할 것이다.isNaN
함수, Number.isNaN
함수이다.Object.is
함수 또한 사용 가능한다.console.log(isNaN(NaN));//true
Number.isNaN(NaN); // true
Object.is(NaN, NaN) //true -> Object.is 는 두 값이 같은지를 비교한다.
❗❗ 이때 주의해야 할 점은, isNaN
은 값을 숫자로 변환했을 때 NaN이 되면 true를 반환하지만, Number.isNaN
은 값이 오직 NaN
인 경우에만 을 반환한다.
isNaN
❗❗
isNaN
은 안티패턴이다.
- 암묵적 처리를 한다.
isNaN('a') //true
- isNaN은 a를 숫자로 변환한다. 즉 NaN이 되므로 true가 반환된다. -> 의도와는 다르게 동작한다.