The NaN
is a global property that represent as “Not-a-Number” value.
Syntax
window.NaN
Description
The NaN
is a property originally from window
global object.
NaN
vs window.NaN
vs Number.NaN
No matter NaN
or window.NaN
or Number.NaN
, they are the same and equivalent. To prove you, we use Object.is()
method to check both of them are the same.
Object.is(NaN, NaN) // true
Object.is(NaN, Number.NaN) // true
Object.is(NaN, window.NaN) // true
Object.is(Number.NaN, NaN) // true
Object.is(Number.NaN, Number.NaN) // true
Object.is(Number.NaN, window.NaN) // true
Object.is(window.NaN, NaN) // true
Object.is(window.NaN, Number.NaN) // true
Object.is(window.NaN, window.NaN) // true
Don’t Use Comparison Operator
Don’t use the comparison operator to check whether the value is NaN
, it can happen unexpected results.
NaN == NaN; // false
NaN == Number.NaN; // false
NaN === NaN; // false
NaN === Number.NaN; // false
isNaN(NaN); // true
isNaN(Number.NaN); // true
Number.isNaN(NaN); // true
Use Number.isNaN()
To check whether a value is a NaN
value, we recommend use the Number.isNaN()
function.
Number.isNaN(NaN); // true
Number.isNaN(Number.NaN); // true
Number.isNaN(window.NaN); // true
Don’t use isNaN()
The reason not to recommend to using isNaN()
is because it can also happened unexpected results. When the input is a string, it can also return true
, while the Number.isNaN()
will return true when it’s only NaN
.
isNaN('Jorcus'); // true
Number.isNaN('Jorcus'); // false
When NaN
happened?
The NaN
is a non-writable, non-enumerable and non-configurable property. It’s hardly see a program will use NaN. Most of the cases we have seen are dealing with math or numbers.
123 ** NaN
– Operand of an argument is NaNInfinity - Infinity
– When dealing with InfinityInfinity * 0
– Weird math calculation"string"*5
– Involving with stringsmath.max("hello");
– Number cannot be resolvedMath.sqrt(-5);
– Result is not a real number
Browser Support
Browser | Chrome | Edge | Mozilla | Safari | Opera |
NaN | Yes | Yes | Yes | Yes | Yes |
Further Readings
- Understanding
NaN
vsNumber.NaN
vswindow.NaN
- Understanding Object.is()
- Understanding isNaN()