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 meansNaN
is 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
NaN
is involved in a mathematical operation (but not bitwise operations), the result is usually alsoNaN
. (See counter-example below.) - When
NaN
is one of the operands of any relational comparison (>
,<
,>=
,<=
), the result is alwaysfalse
. NaN
compares unequal (via==
,!=
,===
, and!==
) to any other value — including to anotherNaN
value.
NaN
is also one of the falsy values in JavaScript.