为啥 1+ +"2"+3 在 JavaScript 中计算为 6? [复制]

Posted

技术标签:

【中文标题】为啥 1+ +"2"+3 在 JavaScript 中计算为 6? [复制]【英文标题】:Why does 1+ +"2"+3 evaluate to 6 in JavaScript? [duplicate]为什么 1+ +"2"+3 在 JavaScript 中计算为 6? [复制] 【发布时间】:2019-02-18 22:05:18 【问题描述】:

谁能告诉我 javascript 中的 1+ +"2"+3 表达式为什么以及如何导致 6 并且这也是一个数字?我不明白如何在两个 + 运算符之间引入一个空格将字符串转换为数字。

【问题讨论】:

结果不是 5,而是 6。请参阅 MDN 上的 Unary +。 那是5,我得到了6!顺便说一句,+ 会将字符串评估为Number 【参考方案1】:

使用 +"2" 将字符串值 ("2") 转换为一个数字,因此表达式计算为 6,因为它本质上计算为 1 + (+"2") + 3,而 1 + 2 + 3 又计算为 1 + 2 + 3

console.log(1 + +"2" + 3);
console.log(typeof "2");
console.log(typeof(+"2"));

如果不将两个 + 符号隔开,它们将被解析为 ++(增量值)运算符。

【讨论】:

【参考方案2】:

很简单,先将字符串+“2”转换为数字(根据运算符优先级),然后将这些都相加。

对于运算符优先级mozilla developer link

【讨论】:

【参考方案3】:
 1+ +"2"+3 results 6
 1+"2"+3 results "123"
AS The unary + operator converts its operand to Number type.

【讨论】:

【参考方案4】:

+"2" 是一种将字符串"2" 转换为数字2 的方法。剩下的只是一个简单的加法。

两个+ 运算符之间需要空格以避免与(前/后)增量运算符++ 混淆。

请注意,转换是在加法之前完成的,因为一元运算符+ 的优先级高于加法运算符。见此表:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table

【讨论】:

以上是关于为啥 1+ +"2"+3 在 JavaScript 中计算为 6? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥是“纱线 2”纱线 3.0.1?

在C语言中除法运算为啥没有小数部分?

为啥“-3 >> 1”不会产生与“-3 / 2”相同的结果? [复制]

python 的range()函数怎么使用,为啥单独运行print(range(1,5))输出还是range(1,5),而不是[1,2,3,4]

在“不允许”位置获取后,sendSynchronousRequest 在 3.1.2 下失败

为啥“123”.split('') 不等于 [1, 2, 3].join('').split('') [重复]