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