为什么这个语句 1+ +"2"+3 在 JavaScript 中返回 6?
console.log(1+ +"2"+3) // 6.
两个加号 (+) 操作数之间有一个空格。即使我们有一个带引号的字符串,它也会将字符串视为数字,这让我感到困惑。
有人可以解释一下吗?
最佳答案
因为 +"2"
中的 +
将 "2"
强制转换为 2
,因此得到 1 + 2 + 3
,因此6
。一元 1 +
比二进制 2 +
具有更高的优先级(例如,它首先发生)。 MDN 有一个相当好的优先级图表 here .
例如,从 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<小时/>
1 “一元”运算符是只接受一个操作数的运算符,例如+"2"
中的 +
(其中 "2"
是操作数)
² “二元”运算符是接受两个操作数的运算符,例如1 + 2
中的 +
(其中 1
和 2
是操作数)
(还有接受三个操作数的“三元”运算符;JavaScript 目前唯一的三元运算符是条件运算符:test ? result1 : result2
)
关于javascript - 引用的值被视为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46650849/