Умножение не коммутативно?

Спецификация языка ECMAScript указывает, что оператор умножения является коммутативным (A*B==B*A). Однако это не имеет места, если A или B включает оператор присваивания. Например, если я наберу следующее в консоли браузера:

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

дает 15, однако:

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

дает 30.

Или коммутативное означает, что оно коммутативно, когда все переменные были преобразованы в их значения? Однако спецификация говорит о "* операторе", а не о математической операции умножения.

1 ответ

Проблема в том, что x+2 во втором примере - 6 вместо 3, потому что вы уже присвоили x=4;

значение после:

((x = 4) + 1)

что происходит

(x + 2) == (4 + 2) == 6

а также

(4+1) * 6 = 30

это нормальное поведение

Другие вопросы по тегам