javascript - 引用的值被视为整数

标签 javascript string type-conversion

为什么这个语句 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 开始,然后:

  1. 首先完成 +"2" 部分,结果为 2,因为一元 + 将字符串转换为数字(同样的方式Number("2") 会)。所以现在我们有1 + 2 + 3
  2. 接下来执行
  3. 1 + 2,因为二元+ 运算符(无论是加法还是串联)是从左到右关联的。这样我们就得到了 3,还剩下 3 + 3
  4. 3 + 3 完成,得到 6

例如:

1 + +"2" + 3
1 + 2 + 3
3 + 3
6
<小时/>

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

² “二元”运算符是接受两个操作数的运算符,例如1 + 2 中的 +(其中 12 是操作数)

(还有接受三个操作数的“三元”运算符;JavaScript 目前唯一的三元运算符是条件运算符:test ? result1 : result2)

关于javascript - 引用的值被视为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46650849/

相关文章:

Python 2.7-将函数应用于 pandas 数据框的 2 列的最快方法

java - 为什么在 Java 中使用 copyValueOf 方法?

java - 为什么我不能在第一个条件中使用类型检查变量作为第二个条件中的类型转换变量?

javascript - 在 .js 中设置默认选项卡

javascript - Jquery .load() 没有正确加载 html

c++ - 常量字符串如何在 C++ 中工作

go - 将类型变量传递给函数

javascript - Express.js :how to use different middlewares based on NODE_ENV?

javascript - window.open 在窗口中显示日志文件

sql-server - 如何将 Nvarchar 列转换为 INT