(PHP有||
和OR
。JS只有||
。)
JS。根据MDN,||
的优先级高于=
。因此这行代码是不起作用的:
a || a = 1;
因为它被评估为:
(a || a) = 1;
这将导致"Invalid left-hand side in assignment(在赋值中左侧无效)",我理解了。这很有道理。
PHP。 根据PHP.net,对于 PHP,它的工作方式与 JavaScript 相同:||
在 =
之前。然而,我经常使用下面这种写法:
$a || $a = 1;
为什么它在PHP中可用?而且更重要的是:PHP的“OR”比“=”的优先级低,所以这些应该不相同:
为什么在 PHP 中有效呢?而且更糟糕的是:PHP 的“OR”运算优先级低于“=”运算符,因此这两个运算符不应该等效:
返回值:
为什么在 PHP 中有效呢?而且更糟糕的是:PHP 的OR
运算优先级低于=
运算符,因此这两个运算符不应该等效:
$a || $a = 1;
$a OR $a = 1;
但它们确实......https://3v4l.org/UWXMd
我认为 JS 的 ||
遵循 MDN 的表格工作,而 PHP 的 OR
像 PHP 的表格一样工作,但是 PHP 的 ||
不应该像它现在这样工作。
这是另一个奇怪的 PHP 怪癖吗?
手册还提到了这个:
尽管
=
优先级比大多数其他运算符低,但 PHP 仍将允许类似以下的表达式:if (!$a = foo())
,在这种情况下,foo()
的返回值被放入$a
中。
优先级表规定 PHP 应该计算 (!$a) = foo()
,这没有意义并且应该失败,但 PHP 将其评估为 !($a = foo())
,因为它喜欢异常。
跟进问题:你认为 if ( $d = $c && $e = $b && $f = $a )
做什么? https://3v4l.org/3P2hN 我不明白...我确实理解第二和第三种情况(使用 and
),只是不知道第一种情况会发生什么。
a = b unless a
,这是一种逻辑上等效的语法,但是“为”这种情况而设计。 - user2864740