Arrays JavaScript空加(+;)运算符

Arrays JavaScript空加(+;)运算符,arrays,null,javascript,Arrays,Null,Javascript,我试图理解JavaScript的核心。我知道它没有太多的实现价值。如果你不想回答,就别说了。但是,如果您能在应用加法(+)时帮助理解以下类型强制,我将不胜感激 我知道null是一个空的或缺少的对象。如果您能在这里解释类型强制或一元(+)操作的步骤,我将不胜感激。谢谢你阅读这个问题 从分析结果得出的结论 true强制为1(而false强制为0) null强制为0 未定义强制为NaN 数组的行为如下: 在一元+(+[])下: 如果长度为1,则为第一个元素 如果它们是空的,则为0 如果有多个元素,

我试图理解JavaScript的核心。我知道它没有太多的实现价值。如果你不想回答,就别说了。但是,如果您能在应用加法(+)时帮助理解以下类型强制,我将不胜感激

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

从分析结果得出的结论
true
强制为1(而
false
强制为0)

null
强制为0

未定义
强制为NaN

数组的行为如下:

  • 在一元+(
    +[]
    )下:
    • 如果长度为1,则为第一个元素
    • 如果它们是空的,则为0
    • 如果有多个元素,则为NaN
  • 在binary+(
    1+[]
    )下:
    • 将两个运算符强制为字符串并联接它们
NaN上的所有操作都返回NaN

中介绍了这一点-请随意阅读并遵循规则

前五个案例可以通过以下几点来解释:

值到数字(值)
---------   ---------------
空0
未定义的NaN
楠楠
1           1
真1
0+0==0
(和
1+0==1
),而。由于上面的每个值也是一个原语,因此计算结果为x(其中x不是字符串),并且未调用“字符串连接子句”

最后一种情况的不同之处在于,它是由数组上的
ToPrimitive
(最终调用)生成的,该数组生成一个字符串值。因此,它最终应用
到字符串
,而不是
到数字
,如下所示:

   true + [null]
=> true + ""          // after ToPrimitive([null]) => ""
=> "true" + ""        // after ToString(true) => "true"
=> "true"             // via String Concatenation

请不要再来了。在现实生活中,没有人这样做,为什么每个人都关心它呢?这一点包含在-读你的心,并遵循规则。手工计算是一个简单但繁琐的过程。
null
转换为
0
0+0
0
@KhanSharp,但它确实如此。ToPrimitive(null)->null应用于两个操作数。由于这之后的两个值都不是字符串,因此它将继续使用ToNumber(null)+ToNumber(null)或0+0=>0。@zerkms如果递增一个以
null
开头的变量,那么想要知道
null+1
是什么是完全合法的,但其他变量不太想知道答案,Array.toString()实现了Array.join(“”)基于这个原因,[].toString()==''你能详细解释一下为什么[null].toString()==''好吧,:'让func成为调用带有参数“join”的数组的[[Get]]内部方法的结果。'换句话说,
arr.toString()
实际上只是调用
arr.join()
@KhanSharp:因为
array.prototype.join
说:“如果
元素
未定义
,则将
下一个
设为空字符串;否则,让
next
成为
ToString(元素)
   true + [null]
=> true + ""          // after ToPrimitive([null]) => ""
=> "true" + ""        // after ToString(true) => "true"
=> "true"             // via String Concatenation