为什么这句话1+ +“2”+3在javascript中返回6?
console.log(1+ +"2"+3) // 6.
在两个加号(+)操作数之间有一个空格。即使我们有一个带引号的字符串,它也会将字符串视为一个数字,这让我感到困惑。
有人可以解释一下吗?
答案 0 :(得分:7)
由于+
中的+"2"
强制"2"
至2
,因此您获得1 + 2 + 3
,因此6
。+
一元¹+
的优先级高于二元²1 + +"2" + 3
(例如,它首先发生)。 MDN有一个相当不错的优先级图表here。
例如,从+"2"
开始,然后:
2
部分,结果为+
,因为该一元Number("2")
会将字符串转换为数字(1 + 2 + 3
会采用相同的方式)。现在我们有1 + 2
。+
接下来完成,因为二进制3
运算符(无论是加法还是连接)是从左到右关联的。这样我们就会3 + 3
,而3 + 3
会离开。6
已完成,正在为我们提供+
。E.g:
1 + +"2" + 3 1 + 2 + 3 3 + 3 6
¹“一元”运算符是仅接受一个操作数的运算符,例如+"2"
中的"2"
(其中+
是操作数)
²“二进制”运算符是接受两个操作数的运算符,例如1 + 2
中的1
(其中2
和test ? result1 : result2
是操作数)
(还有“三元”运算符接受三个操作数; JavaScript唯一的当前三元运算符是条件运算符:to_code_points()
)