Является ли «ассоциативность оператора справа налево» таким же, как порядок вычисления в операторе присваивания в javaScript - PullRequest
1 голос
/ 04 марта 2020

Мне нужно знать, совпадает ли оператор ассоциативности с порядком вычисления оператора присваивания и других операторов в 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"

1 Ответ

2 голосов
/ 04 марта 2020

Ответ можно найти на странице MDN на Приоритет оператора (выделено мной):

Ассоциативность определяет, как операторы с одинаковым приоритетом анализируются , Например, рассмотрим выражение:

a OP b OP c

Ассоциативность слева (слева направо) означает, что оно обрабатывается как (a OP b) OP c, а ассоциативность справа (справа налево) означает, что оно интерпретируется как a OP (b OP c).

Ассоциативность вступает в игру только в том случае, если у вас есть несколько операторов с одинаковым приоритетом. В случае если у вас есть несколько операторов присваивания, они оцениваются справа налево, но каждый отдельный оператор присваивания все еще присваивает операнду right имени left .

В вашем фрагменте кода:

y = z = 10;

Это эквивалентно:

y = (z = 10);

И так как оператор присваивания оценивает значение, которое было присвоено (10), вы получаете y = 10; после присвоения z.

Если у вас есть только один оператор , ассоциативность не применяется. В операторе присваивания правый операнд назначается левому операнду, полная остановка. Порядок, в котором они оцениваются , определяется приоритетом оператора, как указано на странице MDN выше.

...