8

what is NaN, Object or primitive?

NaN - Not a Number

kapa
  • 75,446
  • 20
  • 155
  • 173
DuduAlul
  • 6,092
  • 7
  • 37
  • 61

3 Answers3

12

It's a primitive. You can check in a number of ways:

  • typeof NaN gives "number," not "object."

  • Add a property, it disappears. NaN.foo = "hi"; console.log(NaN.foo) // undefined

  • NaN instanceof Number gives false (but we know it's a number, so it must be a primitive).

It wouldn't really make sense for NaN to be an object, because expressions like 0 / 0 need to result in NaN, and math operations always result in primitives. Having NaN as an object would also mean it could not act as a falsey value, which it does in some cases.

Dagg Nabbit
  • 72,560
  • 18
  • 107
  • 141
6

NaN is a primitive Number value. Just like 1, 2, etc.

kapa
  • 75,446
  • 20
  • 155
  • 173
1

NaN is a property of the global object.

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. It is the returned value when Math functions fail (Math.sqrt(-1)) or when a function trying to parse a number fails (parseInt("blabla")).

Reference

kapa
  • 75,446
  • 20
  • 155
  • 173
Katti
  • 1,793
  • 15
  • 30