ECMAScript语言规范specifies是乘法运算符是可交换的(A * B == B * A)。但是,如果A或B包含赋值运算符,则此方法不成立。例如,如果我在浏览器的控制台中键入以下内容:

 var x = 1;
 (x + 2) * ((x = 4) + 1);

给出15,但是:
 var x = 1;
 ((x = 4) + 1) * (x + 2)

给出30。

还是可交换的表示所有变量均已解析为其值后即可交换?但是,规范只讨论“*运算符”,而不是数学乘法运算。

最佳答案

问题是在第二个示例中x + 2是6而不是3,因为您已经分配了x = 4;

之后的意思:

((x = 4) + 1)

发生的是
(x + 2) == (4 + 2) == 6


(4+1) * 6 = 30

这是正常现象

关于javascript - 乘法不是可交换的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26757367/

10-10 14:00