In JavaScript, NaN === NaN evaluates to false, which might seem strange at first. To understand this behavior, we need to explore what NaN represents and why it behaves this way.
What is NaN?
NaN stands for “Not-a-Number” and is used to represent the result of invalid or undefined numerical operations. For example:
console.log(0 / 0); // NaN
console.log(Math.sqrt(-1)); // NaN
Why Does NaN === NaN Return False?
According to the IEEE 754 floating-point standard, NaN is not equal to anything, including itself. This ensures that invalid results aren’t mistakenly treated as valid. In simple terms, NaN signals an error, and JavaScript treats it as incomparable to anything.
How to Check for NaN
Since direct comparisons won’t work, use these methods to check for NaN:
- Global isNaN() – checks if a value is NaN or can be converted to it:
console.log(isNaN("abc")); // true
- Number.isNaN() – specifically checks for NaN without conversion:
console.log(Number.isNaN(NaN)); // true
Conclusion
NaN === NaN returns false because NaN represents an error, not a valid number. To check for NaN, use isNaN() or Number.isNaN() to avoid confusion and bugs.
Top comments (0)