NaN
: Not a Number의 약어로 한국어로 해석하면 '숫자가 아니다'라는 뜻이지만, 실제로는 잘못된 수학 계산 또는 잘못된 숫자를 의미.
다음과 같이 숫자가 아닌 값에 연산을 수행하거나, 0을 0으로 나누면 NaN 출력
NaN은 숫자형이지만 숫자가 아닌 값
console.log(0 / 0); // NaN
console.log(100 / 'hi'); // NaN
console.log('hi' * 100); // NaN
NaN을 반환하는 연산(MDN)
console.log(isNaN(null)) // false(NaN이 아님)
console.log(isNaN("10")) // false(NaN이 아님)
console.log(isNaN(undefined)) // true(NaN임) undefined는 NaN이 아니기 때문에 false가 나올 것으로 예상
console.log(isNaN("hello world")) // true(NaN임) 문자열은 NaN이 아니기 때문에 false가 나올 것으로 예상
console.log(isNaN(NaN)) // true
isNaN()함수는 넘어오는 인수를 먼저 숫자로 변환시도한다. 그리고 그 결과값을 통해 NaN 여부를 확인함.
isNaN(Number(null))
isNaN(0) // false
isNaN(Number("10"))
isNaN(10) // false
isNaN(Number(undefined))
isNaN(NaN) // true
isNaN(Number("hello world"))
isNaN(NaN) // true
isNan(Number(NaN))
isNAN(NaN) // true
Number.isNaN()
함수는 주어진 값의 유형이 Number이고 값이 NaN이어야만 true를 반환
함. console.log(Number.isNaN(null)) // false
console.log(Number.isNaN("10")) // false
console.log(Number.isNaN(undefined)) // false, isNaN()으로는 true
console.log(Number.isNaN("hello world")) // false, isNaN()으로는 true
console.log(Number.isNaN(NaN)) // true
NaN을 숫자가 아닌 것들로 해석해서 string이나 null, undefined는 다 isNaN으로 했을 때 true로 나와야하는 것 아닌가 해서 처음에 너무헷갈렸다.
내가 생각한 대로 나오려면, typeof 을 써야한다는 것을 알게 되었다.