提问人:Kevin 提问时间:3/4/2020 最后编辑:txemsukrKevin 更新时间:3/4/2020 访问量:1598
“从右到左运算符关联性”是否与 javaScript 中赋值运算符中的求值顺序相同
Is "right to left operator Associativity" the same as the order of evaluation in assignment operator in javaScript
问:
例如,我需要知道运算符关联性是否与 JavaScript 中赋值运算符和其他运算符的计算顺序相同
var x;
x = 10;
在上面的代码中,我需要知道赋值表达式是从“从右到左”还是“从左到右”执行的,因为赋值运算符的运算符关联性是“从右到左”,我有点担心像这样的普通赋值表达式是如何执行的。它是从“从右到左”还是“从左到右”执行,在下面的代码中,您可以看到赋值表达式是从右到左执行的。x = 10;
x = 10;
var y;
var z;
y = z = 10; // In this snippet you can see that both the variables "y" and "z" hold the value of number 10 this means that the Assignment operator is executed from "right to left";
// Now i must know whether a normal Assignment operator is also executed from "right to left" because Assignment operator is having "right to left" Associativity;
var c;
c = 10; // Not sure whether how and to which side this assignment expression is executed is it executed from "left to right" or "right to left"
答:
2赞
Klaycon
3/4/2020
#1
答案可以在 MDN 的 Operator Precedence 页面中找到(强调我的):
关联性决定了相同优先级的运算符的 解析。例如,考虑一个表达式:
a OP b OP c
左关联性(从左到右)表示它被处理为 ,而右关联性(从右到左)表示它是 解释为 .
(a OP b) OP c
a OP (b OP c)
仅当具有相同优先级的多个运算符时,关联性才会发挥作用。如果有多个赋值运算符,则从右到左计算这些运算符,但每个单独的赋值运算符仍将右操作数分配给左名。
在代码片段中:
y = z = 10;
这相当于:
y = (z = 10);
而且,由于赋值运算符的计算结果为赋值 (10),因此您在赋值后得到。y = 10;
z
如果只有一个运算符,则关联性不适用。在赋值运算符中,右操作数被赋值给左操作数,句号。评估它们的顺序由上面的 MDN 页面中列出的运算符优先级决定。
评论
1赞
Mike Robinson
3/4/2020
此外,为了加强 Klaycon 刚才所说的话:仍将首先执行乘法运算(从左到右或从右到左,因为它们相邻),因为此运算符的优先级高于 .这符合代数的普通规则。结果将是 .a = 1 + 3 * 4 * 4
*
+
49
0赞
Kevin
3/4/2020
@Klaycon好吧,如果从右到左执行,我能知道这是如何执行的,是从右到左执行的,就像 ?x = y = 10;
x = 10;
x = 10;
x = y = 10;
1赞
Klaycon
3/5/2020
@Kevin“从右到左执行”是模棱两可的。赋值运算符首先计算右操作数,然后将其值赋值给左操作数。 首先计算,然后将其分配给 。 由于运算符关联性,首先被解析为,然后首先被计算,然后被分配给计算的结果。=
x = 10
10
x
x = y = 10;
x = (y = 10)
y = 10
x
y = 10
0赞
Kevin
3/5/2020
@Klaycon,那么,如何证明赋值运算符是从右到左执行的
0赞
Klaycon
3/5/2020
@Kevin您能否提供更多详细信息,说明为什么这是您的问题,或者为什么您需要证明它?您是否遇到与执行顺序相关的问题?似乎您可能遇到了 XY 问题,即其他一些问题被误诊为执行顺序问题
评论
10 = x
a = b = 10;
a = 10;