问题
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+).
回答1:
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:
- prefix/postfix increment and decrement
- the unary + and - operators
- the + operator if none of the two arguments is a string
- subtraction, multiplication, division and modulo operation
- relational operators if not both arguments are strings
It is not used by the equality operators, so null == 0
is false (and null !== 0
anyway)!
回答2:
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
回答3:
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.
来源:https://stackoverflow.com/questions/21001320/is-null-considered-zero-and-undefined-not-a-number-on-arithmetic-expressions