关于JavaScript和PHP赋值运算符:为什么结果不同?

by_*_*per 6 javascript php

JavaScript代码:

var a = 1, b = 2;
a = b + (b = a) * 0;
// result a = 2, b = 1;
Run Code Online (Sandbox Code Playgroud)

PHP代码1:

$a = 1;
$b = 2;
$a = $b + ($b = $a) * 0;
// result $a = 1, $b = 1;
Run Code Online (Sandbox Code Playgroud)

PHP代码2:

$a = 1;
$b = 2;
$a = (int)$b + ($b = $a) * 0;
// result $a = 2, $b = 1;
Run Code Online (Sandbox Code Playgroud)

是什么导致PHP和JavaScript赋值运算符之间的差异?

是否与运营商优先级相关?

我想知道原因是什么.谢谢!

Nie*_*jes 4

不,运算符优先级不会影响计算顺序,因此在复杂计算中使用赋值并重用计算结果始终是未定义的。

来自 PHP 手册

运算符优先级和结合性仅决定表达式的分组方式,它们不指定计算顺序。PHP 不(在一般情况下)指定表达式的计算顺序,并且应避免假定特定计算顺序的代码,因为行为可能会在 PHP 版本之间或根据周围的代码而变化。

简而言之, 的输出$b + ($b = $a)是未定义的,因为分组会覆盖优先级,并且无论如何都不会强制赋值是发生在获取加法的左操作数之前还是之后。优先级已明确定义,但执行/评估顺序未定义