JS Tip of the Day: What is a NaN?

What is a NaN?
Level: Beginner

In JavaScript NaN stands for Not a Number. Its a primitive value that is used to represent a non-number value within the number type. So in reality, NaN is both a number, and not.

The value NaN is accessible both as a global and as a property of Number.

console.log(NaN); // NaN
console.log(Number.NaN); // NaN
console.log(typeof NaN); // number

Any time you perform a numeric operation that can’t resolve into a number, you’ll get NaN as a result.

console.log(1 * 'x'); // NaN
console.log(0/0); // NaN
console.log(Math.sqrt(-1)); // NaN

If you try to convert a value that can’t be turned into a number, you’ll also get a NaN value in return.

console.log(Number('x')); // NaN
console.log(+{}); // NaN

The value NaN has a peculiar behavior where its not equal to itself.

console.log(NaN === NaN); // false

To see if something is NaN, instead of comparing it to NaN, you can use an isNaN() function. There are also two of these, one global and one in Number, though they work slightly differently. The global isNaN() will first try to convert a value to a number and then see if the result is NaN whereas Number.isNaN() will check specifically to see if the value its given is the value NaN.

console.log(isNaN(NaN)); // true
console.log(isNaN('1')); // false
console.log(isNaN('x')); // true

console.log(Number.isNaN(NaN)); // true
console.log(Number.isNaN('1')); // false
console.log(Number.isNaN('x')); // false

More info: