Нуль считается нулевым и 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