According to MDN,

NaN is a property of the global object. In other words, it is a variable in global scope.

The initial value of NaN is Not-A-Number â€”

the same as the value of Number.NaN. In modern browsers, NaN is a non-configurable, non-writable property. Even when this is not the case, avoid overriding it. It is rather rare to use NaN in a program.

Hear the value of NaN is Number.NaN. But, wait!

```
NaN === Number.NaN // false
```

Maybe because of the type you thinkđź¤”

```
NaN == Number.NaN // false
```

Somewhat reasonable explanation started here when I followed the links.

With a lot of confusion around NaN, let us see how we could arrive at a value of NaN. There are 5 different operations which could result in NaN.

Numbers that can't be parsed

`parseInt('Integer') â‡’ NaN Number('%^@#') â‡’ NaN`

Math operation where the result is not a real number

`Math.sqrt(-1); â‡’ NaN`

The operand of an argument is NaN

`NaN + 20 â‡’ NaN 60 * NaN â‡’ NaN`

Indeterminate form

`0 * Infinity â‡’ NaN`

Any operation that involves a string and is not an addition operation

`"Integer" * 5 â‡’ NaN`

For geekier discussions, reach out to me on twitter at @radnerus93, đź“Ą DM always open.