Reputation: 15086
Is null
evaluated to 0
and undefined
to NaN
on arithmetic expressions?
According to some testing it seems so:
> null + null
0
> 4 + null
4
> undefined + undefined
NaN
> 4 + undefined
NaN
Is it safe or correct to assume this? (a quote from a documentation would be A+).
Upvotes: 22
Views: 22710
Reputation: 664538
Is null evaluated to 0 and undefined to NaN on arithmetic expressions? Is it safe or correct to assume this?
Yes, it is. An "arithmetic expression" would use the ToNumber
operation:
Argument Type | Result
--------------+--------
Undefined | NaN
Null | +0
… |
It is used in the following "arithmetic" expressions:
+
and -
operators+
operator if none of the two arguments is a stringIt is not used by the equality operators, so null == 0
is false (and null !== 0
anyway)!
Upvotes: 17
Reputation: 15086
It seems safe to assume so since, in an arithmetic expression (e.g. addition), the method ToNumber would be called on it, evaluating NaN
and +0
from undefined
and null
respectively:
To Number Conversions
╔═══════════════╦════════════════════════════════════════════╗
║ Argument Type ║ Result ║
╠═══════════════╬════════════════════════════════════════════╣
║ Undefined ║ NaN ║
║ ║ ║
║ Null ║ +0 ║
║ ║ ║
║ Boolean ║ The result is 1 if the argument is true. ║
║ ║ The result is +0 if the argument is false. ║
║ ║ ║
║ Number ║ The result equals the input argument (no ║
║ ║ conversion). ║
║ ║ ║
║ String ║ See grammar and note below. ║
║ ║ ║
║ Object ║ Apply the following steps: ║
║ ║ 1. Let primValue be ToPrimitive(input ║
║ ║ argument, hint Number). ║
║ ║ 2. Return ToNumber(primValue). ║
╚═══════════════╩════════════════════════════════════════════╝
ECMAScript Language Specification - ECMA-262 Edition 5.1
Upvotes: 5
Reputation: 4637
Without being type bound,
null == false == 0
null !== false !== 0
http://www.mapbender.org/JavaScript_pitfalls:_null,_false,_undefined,_NaN#0_6
With that said, null == 0
, null + 4 = 4
I hope this helps.
Upvotes: 1