NaN
The global NaN property is a value representing Not-A-Number.
Value
The same number value as Number.NaN.
Description
NaN is a property of the global object. In other words, it is a variable in global scope.
In modern browsers, NaN is a non-configurable, non-writable property. Even when this is not the case, avoid overriding it.
There are five different types of operations that return NaN:
- Failed number conversion (e.g. explicit ones like
parseInt("blabla"),Number(undefined), or implicit ones likeMath.abs(undefined)) - Math operation where the result is not a real number (e.g.
Math.sqrt(-1)) - Indeterminate form (e.g.
0 * Infinity,1 ** Infinity,Infinity / Infinity,Infinity - Infinity) - A method or expression whose operand is or gets coerced to
NaN(e.g.7 ** NaN,7 * "blabla") — this meansNaNis contagious - Other cases where an invalid value is to be represented as a number (e.g. an invalid
new Date("blabla").getTime(),"".charCodeAt(1))
NaN and its behaviors are not invented by JavaScript. Its semantics in floating point arithmetic (including that NaN !== NaN) are specified by IEEE 754. NaN's behaviors include:
- If
NaNis involved in a mathematical operation (but not bitwise operations), the result is usually alsoNaN. (See counter-example below.) - When
NaNis one of the operands of any relational comparison (>,<,>=,<=), the result is alwaysfalse. NaNcompares unequal (via==,!=,===, and!==) to any other value — including to anotherNaNvalue.
NaN is also one of the falsy values in JavaScript.