引用值被视为整数

时间:2017-10-09 16:17:55

标签: javascript string type-conversion

为什么这句话1+ +“2”+3在javascript中返回6?

console.log(1+ +"2"+3) // 6.

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

有人可以解释一下吗?

1 个答案:

答案 0 :(得分:7)

由于+中的+"2"强制"2"2,因此您获得1 + 2 + 3,因此6+一元¹+的优先级高于二元²1 + +"2" + 3(例如,它首先发生)。 MDN有一个相当不错的优先级图表here

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

  1. 首先完成2部分,结果为+,因为该一元Number("2")会将字符串转换为数字(1 + 2 + 3会采用相同的方式)。现在我们有1 + 2
  2. +接下来完成,因为二进制3运算符(无论是加法还是连接)是从左到右关联的。这样我们就会3 + 3,而3 + 3会离开。
  3. 6已完成,正在为我们提供+
  4. E.g:

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

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

    ²“二进制”运算符是接受两个操作数的运算符,例如1 + 2中的1(其中2test ? result1 : result2是操作数)

    (还有“三元”运算符接受三个操作数; JavaScript唯一的当前三元运算符是条件运算符:to_code_points()