San*_*mar 0 javascript string type-conversion
为什么这个声明1+ +"2"+3在javascript中返回6?
console.log(1+ +"2"+3) // 6.
Run Code Online (Sandbox Code Playgroud)
在两个加号(+)操作数之间有一个空格.即使我们有一个带引号的字符串,它将字符串视为一个数字,这让我感到困惑.
有人可以解释一下吗?
因为+
在+"2"
要挟"2"
来2
,这样你可以获得1 + 2 + 3
,因此6
.一元¹的+
优先级高于二元² +
(例如,它首先发生).MDN 在这里有一个相当不错的优先级图表.
例如,从开始1 + +"2" + 3
,然后:
+"2"
部分首先完成,2
因为该一元+
将字符串转换为数字(以相同的方式Number("2")
).所以现在我们有了1 + 2 + 3
.1 + 2
接下来是因为二元+
运算符(无论是加法还是连接)是从左到右的关联.所以这给了我们3
,我们3 + 3
离开了.3 + 3
完成了,给了我们6
.例如:
1 + +"2" + 3 1 + 2 + 3 3 + 3 6
¹"一元"运算符是仅接受一个操作数的运算符,例如+
in +"2"
(其中"2"
是操作数)
²"二进制"运算符是接受两个操作数的运算符,例如+
in 1 + 2
(where 1
和2
are操作数)
(也有"三元"运营商,其接受三个操作数; JavaScript的目前唯一的三元运算符是条件运算符:test ? result1 : result2
)