NaN
The value NaN
is a special quantity defined by
IEEE 754. It stands for not a number, even though:
typeof NaN === 'number' // true
The value can be produced by attempting to convert a string to a number when the string is not in the form of a number. For example:
+ '0' // 0 + 'oops' // NaN
If NaN
is an operand in an arithmetic
operation, then NaN
will be the result. So, if
you have a chain of formulas that produce NaN
as
a result, at least one of the inputs was NaN
, or
NaN
was generated somewhere.
You can test for NaN
. As we have seen, typeof
does not distinguish between numbers and
NaN
, and it turns out that NaN
is not equal to itself. So, surprisingly:
NaN === NaN // false NaN !== NaN // true
JavaScript provides an isNaN
function that can
distinguish between numbers and NaN
:
isNaN(NaN) // true isNaN(0) // false isNaN('oops') // true isNaN('0') // false
The isFinite
function is the best way of
determining whether a value can be used as a number because it rejects NaN
and Infinity
.
Unfortunately, isFinite
will attempt to convert
its operand to a number, so it is not a good test if a value is not actually a
number. You may want to define your own isNumber
function:
var isNumber = function isNumber(value) { return typeof value === 'number' && isFinite(value); };
Get JavaScript: The Good Parts now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.