Reputation: 6390
what is NaN, Object or primitive?
NaN - Not a Number
Upvotes: 11
Views: 4022
Reputation: 141
Would like to add some observations about NaN that intrigued me:
typeof(NaN)
returns'number'
, butisNaN(NaN)
returnstrue
Funny.
Also,
isNaN(10)
andisNaN('10')
both returnfalse
isNaN('')
returnsfalse
, butisNaN('any alphabetical string')
returnstrue
isNaN(true)
andisNaN(false)
returnfalse
. So boolean values are also considered as a number byisNaN
function.
Upvotes: 0
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")).
Upvotes: 2
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