NaN in JavaScript stands for Not a Number. It is the result of numerical operations, where result is not a number
. It is represented by a special property of the global object with the name NaN. NaN is also property of the number object and can refer it using the Number.NaN
. The typeof
NaN
is primitive number
. We can check whether a value is NaN
by using the isNaN
function or by Number.IsNan
method.
Table of Contents
NaN
The number data type represents all numbers in JavaScript. It also contains three special values i.e. Not A Number (NaN
), positive infinity and negative infinity.
JavaScript does not throw error when we perform a invalid arithmetic operations like dividing by zero. Instead it returns a special value NaN.
NaN is represented by a Literal NaN, which is a property of the global object. NaN is also property of the number object and can refer it using the Number.NaN
1 2 3 4 | console.log(NaN) //NaN console.log(Number.NaN) //NaN |
NaN is a specal value in the number data type. Hence type of NaN is number.
1 2 3 | console.log(typeof(NaN)); //number |
NaN
can happen in several ways.
- Converting an Invalid value to a number
- Dividing Zero by Zero
- Operations involving infinity
- All Operations involving NaN
Converting an Invalid value to a number
In this following case, we are trying to convert a string
to a number
. Since “test” cannot be converted to a number
it results in a NaN
.
1 2 3 4 5 6 7 8 | let num = Number("test"); console.log(num); ***output*** NaN |
Or using an invalid value in any function that expects a number. For Example Math.round
or parseInt
methods
1 2 3 4 | console.log(Math.round("a")); //NaN. console.log(parseInt("b")); //NaN |
Converting Undefined into a number
1 2 3 4 | let v=undefined; console.log(parseInt(v)); //NaN |
1 2 3 4 | let n = Number(undefined) console.log(n) |
Dividing Zero by Zero
Example
1 2 3 4 5 6 7 8 9 10 | let num1 = 0/0; console.log(num1) console.log(typeof(num1)) **output** NaN number |
Operations involving infinity
Multiply an Infinity
by Zero or divide Infinity
by Infinity will result in NaN
. Subtracting Infinity
by Infinity
also results in NaN.
1 2 3 4 5 | console.log(Infinity*0) console.log(Infinity/Infinity) console.log(Infinity-Infinity); |
Operations involving NaN
All operations involving NaN
results in a NaN
.
1 2 3 4 5 6 | console.log(Number.NaN+1) console.log(Number.NaN*1) console.log(Number.NaN/1) console.log(Number.NaN-1) |
Comparing NaN
Any comparison between the two NaN's
always results in false
. NaN
is never equal to itself.
1 2 3 4 5 6 7 | let n1=Number.NaN; //create a NaN let n2=n1; //make it equal console.log(n1 == n2) //false. console.log(n1 != n2) //true |
In the following example, n1 & n2 are NaN's
. But they are neither equal or greater or lesser from each other.
1 2 3 4 5 6 7 8 | let n1=Number.NaN; let n2=Number.NaN; console.log(n1 == n2) //false console.log(n1 > n2) //false console.log(n2 < n1) //false |
How to check if the value is NaN
There are two ways in which we can check if the value is NaN. One is using the isNan
function and the other is to use the Number.isNaN
method.
IsNaN
We can check whether a value is NaN
by using the global IsNaN
method.
1 2 3 | console.log(isNaN(NaN)); //true |
The following code works because isNaN
tries to convert the “test” into a number
, which results in a NaN
value. Hence the output is true
.
1 2 3 | console.log(isNaN("Test")); //true |
Number.IsNaN
You can also use the Number.IsNaN
method, But it does not forcefully convert the parameter to a number
. If the argument is not a number
, then it results false
.
1 2 3 4 | console.log(Number.isNaN(NaN)); //true console.log(Number.isNaN("Test")); //false |
Booleans are not NaN
Booleans are implemented as numerical values with a single binary digit (i.e., 0 & 1). Hence they are treated as numbers.
1 2 3 4 | isNaN(true); // false isNaN(false); // false |
Summary
When a proper number cannot be the result of numerical operations, then the result is NaN
. For Example, converting a string to a number. NaN
is a primitive number. The NaN
can appear when you convert an Invalid value to a number
, Divide Zero by Zero, Some operations involving infinity
& all Operations involving NaN
, etc. You can check if the value is NaN
by using the method IsNaN
or Number.IsNaN
Read More