当JavaScript中加入()运算符时,后缀增量如何工作?

首先,我知道稍后讨论的表达有副作用,不应该在生产环境中使用。我只想通过他们了解JavaScript。所有这些都在Chrome下测试。

var a = 42;
var b = "42";
a + ++b; // result is 85 

这是我对a的理解,

根据Operator precedence,前缀增量()(优先级15)的优先级高于Addition()(优先级13)。b可以将var ToNumber(GetValue(expr))解析为43,参考12.5.7 Prefix Increment Operator.然后,43的结果可以是85。

然而,

var a = 42;
var b = "42";
a++ + b; // "4242"

为什么b的结果是“4242”?

我试图了解结果“4242”,似乎首先返回42,然后为42’42’,42将为’42’var ToString()首先参考12.7.3 The Addition operator ( + ),结果可以是“4242 ”。

但似乎违反规则:Postfix增量(优先级16)高于加法(优先级13)?

var a = 42;
var b = "42";
a +++b; // "4242" 

一个b被解析?

哈哈,棘手一个!

Post-fix增量返回相同的值,然后增加变量。
这是我知道的每种语言的默认行为。

所以,当你这样做(警告:这不是一个有效的表达式,只是显示的想法):

42++ + "42"

真正发生的是:

>第42个由运算符返回
>然后42增加到43
>然后将42(表达式的结果值)强制转换为字符串
>然后两个操作数连接

编辑#1:

如果你这样做:

var a = 42;
var b = "42";
a + b++; // result is 84

测试吧

编辑#2:

所以,我们得出结论,你的问题与运算符优先级无关(

翻译自:https://stackoverflow.com/questions/34633124/how-postfix-increment-work-when-it-meet-addition-operator-in-javascript

转载注明原文:当JavaScript中加入()运算符时,后缀增量如何工作?