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/