Нуль считается нулевым и undefined не числом в арифметических выражениях?
Является ли null
оценкой 0
и undefined
до NaN
по арифметическим выражениям?
В соответствии с некоторыми испытаниями это выглядит так:
> null + null
0
> 4 + null
4
> undefined + undefined
NaN
> 4 + undefined
NaN
Можно ли считать это безопасным или правильным? (цитата из документации будет A +).
Ответы
Ответ 1
Является ли значение null равным 0 и undefined для NaN в арифметических выражениях? Можно ли считать это безопасным или правильным?
Да, это так. "Арифметическое выражение" будет использовать операцию ToNumber
:
Argument Type | Result
--------------+--------
Undefined | NaN
Null | +0
… |
Он используется в следующих выражениях "арифметические":
Он не используется операторами , поэтому null == 0
является ложным (и null !== 0
в любом случае)!
Ответ 2
Кажется безопасным предположить, так как в арифметическом выражении (например, дополнение), метод ToNumber будет вызываться на нем, оценивая NaN
и +0
из undefined
и null
соответственно:
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 - выпуск ECMA-262 5.1
Ответ 3
Без привязки типа
null == false == 0
null !== false !== 0
http://www.mapbender.org/JavaScript_pitfalls:_null,_false,_undefined,_NaN#0_6
С учетом сказанного null == 0
, null + 4 = 4
Надеюсь, это поможет.