引用值被视为整数

San*_*mar 0 javascript string type-conversion

为什么这个声明1+ +"2"+3在javascript中返回6?

console.log(1+ +"2"+3) // 6.
Run Code Online (Sandbox Code Playgroud)

在两个加号(+)操作数之间有一个空格.即使我们有一个带引号的字符串,它将字符串视为一个数字,这让我感到困惑.

有人可以解释一下吗?

T.J*_*der 7

因为++"2"要挟"2"2,这样你可以获得1 + 2 + 3,因此6.一元¹的+优先级高于二元² +(例如,它首先发生).MDN 在这里有一个相当不错的优先级图表.

例如,从开始1 + +"2" + 3,然后:

  1. +"2"部分首先完成,2因为该一元+将字符串转换为数字(以相同的方式Number("2")).所以现在我们有了1 + 2 + 3.
  2. 1 + 2接下来是因为二元+运算符(无论是加法还是连接)是从左到右的关联.所以这给了我们3,我们3 + 3离开了.
  3. 3 + 3完成了,给了我们6.

例如:

1 + +"2" + 3
1 + 2 + 3
3 + 3
6

¹"一元"运算符是仅接受一个操作数的运算符,例如+in +"2"(其中"2"是操作数)

²"二进制"运算符是接受两个操作数的运算符,例如+in 1 + 2(where 12are操作数)

(也有"三元"运营商,其接受三个操作数; JavaScript的目前唯一的三元运算符是条件运算符:test ? result1 : result2)