JavaScript null和plus(+)operatior

Jha*_*bub 5 javascript arrays null

我试图理解JavaScript的核心.我知道它没有太大的实施价值.如果你不想回答,那就离开吧.但是,如果您在应用加法(+)时能够帮助理解以下类型强制,我将不胜感激.

1. 
null + null // 0
2.
null + undefined; // NaN
3.
null + NaN; // NaN
4. 
1 + null; //1
5. 
true + null; //1
6. 
true + [null]; //"true"
Run Code Online (Sandbox Code Playgroud)

我知道null是一个空的或丢失的对象.如果你能解释类型强制或一元(+)操作的步骤,我将不胜感激.感谢您阅读此问题.

use*_*740 16

这将在11.6.1加法运算符(+)中介绍 - 随意阅读并遵守规则.

前五个案例可以通过以下方式解释ToNumber:

Value       ToNumber(Value)
---------   ---------------
null        0
undefined   NaN
NaN         NaN
1           1
true        1
Run Code Online (Sandbox Code Playgroud)

0 + 0 == 0(和1 + 0 == 1),同时x + NaNNaN + x评估NaN.由于上面的每个值也都是一个原语,因此ToPrimitive(x)求值为x(其中x不是字符串),并且未调用"字符串连接子句".

最后一种情况的不同之处在于它是由数组上的ToPrimitive(最终调用Array.prototype.toString)产生的,这导致了一个字符串值.因此,它最终适用ToString,而不是ToNumber,并遵循如下:

   true + [null]
=> true + ""          // after ToPrimitive([null]) => ""
=> "true" + ""        // after ToString(true) => "true"
=> "true"             // via String Concatenation
Run Code Online (Sandbox Code Playgroud)

  • @KhanSharp:因为`Array.prototype.join`说:*"如果`element`是`undefined`或`null`,让`next`是空字符串;否则,让`next`成为`ToString(element)` ."*https://es5.github.io/#x15.4.4.5 (2认同)