为啥 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? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
为啥“-3 >> 1”不会产生与“-3 / 2”相同的结果? [复制]
python 的range()函数怎么使用,为啥单独运行print(range(1,5))输出还是range(1,5),而不是[1,2,3,4]