NaN == NaN // false
모든 것은 이 코드에서 부터 시작이 됐다.
NaN == NaN이 false를 반환하는 이유는 다음과 같습니다:
- NaN의 정의: NaN은 숫자가 아닌 값을 나타내기 위해 사용됩니다. 이 값은 자신과도 같지 않은 유일한 값입니다.
- IEEE 754 표준: IEEE 754 표준에 따르면, NaN과 관련된 모든 비교 연산은 false를 반환해야 합니다. 이는 NaN이 정렬되지 않은 값으로 간주되기 때문입니다. 두 개의 정의되지 않은 값이 동일하다고 말하는 것은 의미가 없기 때문에, NaN은 자신과도 같지 않다고 정의됩니다.
- JavaScript 사양: ECMAScript 사양(JavaScript를 정의하는 표준)은 IEEE 754 표준을 따릅니다. 따라서 JavaScript에서는 NaN == NaN이 false를 반환하도록 정의되어 있습니다.
--> JavaScript에서 값이 NaN인지 확인하려면 isNaN 함수 또는 Number.isNaN 함수를 사용해야 합니다:
- isNaN(value): 이 함수는 값을 숫자로 변환한 후 테스트하기 때문에 비수치 문자열에 대해 예상치 못한 결과를 반환할 수 있습니다.
- Number.isNaN(value): 이 함수는 값이 실제로 NaN인지를 확인하는 데 더 정확합니다.
console.log(NaN == NaN); // false
console.log(NaN === NaN); // false
console.log(isNaN(NaN)); // true
console.log(Number.isNaN(NaN)); // true
isNaN와Number.isNaN은 둘 다 JavaScript에서NaN(Not-a-Number)을 검사하는 데 사용되지만, 이 두 함수는 작동 방식에 중요한 차이점이 있습니다.
isNaN함수
isNaN함수는 주어진 값을 숫자로 변환한 후, 변환된 값이NaN인지 검사합니다. 이 때문에,isNaN함수는 숫자가 아닌 값을 입력받았을 때도true를 반환할 수 있습니다. 예를 들어, 문자열이 숫자로 변환될 수 없을 때isNaN은true를 반환합니다.console.log(isNaN(NaN)); // true console.log(isNaN("Hello")); // true, "Hello"는 숫자가 아니므로 NaN으로 간주 console.log(isNaN(undefined)); // true, undefined는 숫자가 아니므로 NaN으로 간주 console.log(isNaN(123)); // false, 123은 숫자이므로 NaN이 아님
Number.isNaN함수
Number.isNaN함수는 값이 정확히NaN인지를 검사합니다. 이 함수는 값의 형 변환을 수행하지 않기 때문에, 실제로NaN인 경우에만true를 반환합니다. 따라서, 입력값이 숫자로 변환되지 않으면false를 반환합니다.console.log(Number.isNaN(NaN)); // true console.log(Number.isNaN("Hello")); // false, "Hello"는 NaN이 아님 console.log(Number.isNaN(undefined)); // false, undefined는 NaN이 아님 console.log(Number.isNaN(123)); // false, 123은 NaN이 아님요약
isNaN(value): 값이 숫자로 변환될 때NaN이 되는지를 검사합니다. 이로 인해 숫자가 아닌 문자열이나 다른 비수치값도true를 반환할 수 있습니다.Number.isNaN(value): 값이 정확히NaN인지를 검사합니다. 형 변환을 하지 않기 때문에 실제로NaN인 경우에만true를 반환합니다.--> 이러한 차이로 인해
Number.isNaN함수가NaN값을 정확하게 검사하는 데 더 적합합니다.

+ ...근데 typeof NaN 는 'number' 입니다...ㅎㅎㅎ
++ 참고
console.log(isNaN("Hello")); // true, "Hello"는 숫자가 아니므로 NaN으로 간주
console.log(isNaN(123)); // false, 123은 숫자이므로 NaN이 아님
console.log(isNaN("123")); // false, "123"은 숫자로 변환될 수 있음
console.log(isNaN(NaN)); // true, NaN은 NaN임
console.log(isNaN(undefined));// true, undefined는 숫자가 아니므로 NaN으로 간주
console.log(isNaN(null)); // false, null은 0으로 변환되므로 NaN이 아님
console.log(isNaN(true)); // false, true는 1로 변환되므로 NaN이 아님
console.log(Number.isNaN("Hello")); // false, "Hello"는 NaN이 아님
console.log(Number.isNaN(123)); // false, 123은 NaN이 아님
console.log(Number.isNaN("123")); // false, "123"은 NaN이 아님
console.log(Number.isNaN(NaN)); // true, NaN은 NaN임
console.log(Number.isNaN(undefined));// false, undefined는 NaN이 아님
console.log(Number.isNaN(null)); // false, null은 NaN이 아님
console.log(Number.isNaN(true)); // false, true는 NaN이 아님