DuduAlul
DuduAlul

Reputation: 6390

JavaScript: what is NaN, Object or primitive?

what is NaN, Object or primitive?

NaN - Not a Number

Upvotes: 11

Views: 4022

Answers (4)

Vaibhav Chobisa
Vaibhav Chobisa

Reputation: 141

Would like to add some observations about NaN that intrigued me:

  1. typeof(NaN) returns 'number', but isNaN(NaN) returns true

Funny.

Also,

  1. isNaN(10) and isNaN('10') both return false

  2. isNaN('') returns false, but isNaN('any alphabetical string') returns true

  3. isNaN(true) and isNaN(false) return false. So boolean values are also considered as a number by isNaN function.

Upvotes: 0

Katti
Katti

Reputation: 2121

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

Upvotes: 2

Dagg Nabbit
Dagg Nabbit

Reputation: 76736

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.

Upvotes: 15

kapa
kapa

Reputation: 78671

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

Upvotes: 9

Related Questions