“从右到左运算符关联性”是否与 javaScript 中赋值运算符中的求值顺序相同

Is "right to left operator Associativity" the same as the order of evaluation in assignment operator in javaScript

提问人:Kevin 提问时间:3/4/2020 最后编辑:txemsukrKevin 更新时间:3/4/2020 访问量:1598

问:

例如,我需要知道运算符关联性是否与 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"
JavaScript 优先级赋值运算符 顺序

评论

1赞 Alex Michailidis 3/4/2020
如果 JS 中的“从左到右”分配有效,那么应该可以完美无缺地工作。10 = x
1赞 Hunter McMillen 3/4/2020
JavaScript 中的赋值运算符是右关联的,无论您在表达式中包含多少个操作:并且都是右关联的。你可以看看 MDN 上的运算表和每个运算符的关联性:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...a = b = 10;a = 10;
0赞 Kevin 3/4/2020
@HunterMcMillen你好,所以你的意思是正常的赋值表达式也是从“从右到左”执行的
0赞 Kevin 3/4/2020
@AlexMichailidis我认为在您的情况下,Assignment 表达式是从“从左到右”执行的,因为首先它必须检查左操作数,这通常是一个变量,但在您的情况下,它是一个数字。数字“10”,所以因为赋值运算符是从左到右执行的,所以只有你的代码给出了一个错误
1赞 bryan60 3/4/2020
等号的右侧被分配到左侧。别想太多了

答:

2赞 Klaycon 3/4/2020 #1

答案可以在 MDN 的 Operator Precedence 页面中找到(强调我的):

关联性决定了相同优先级的运算符的 解析。例如,考虑一个表达式:

a OP b OP c

左关联性(从左到右)表示它被处理为 ,而右关联性(从右到左)表示它是 解释为 .(a OP b) OP ca 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 = 1010xx = y = 10;x = (y = 10)y = 10xy = 10
0赞 Kevin 3/5/2020
@Klaycon,那么,如何证明赋值运算符是从右到左执行的
0赞 Klaycon 3/5/2020
@Kevin您能否提供更多详细信息,说明为什么这是您的问题,或者为什么您需要证明它?您是否遇到与执行顺序相关的问题?似乎您可能遇到了 XY 问题,即其他一些问题被误诊为执行顺序问题