有人可以向我解释为什么下面的 javascript 代码会产生 321 的警报,而 PHP 代码会产生 1。
我知道 PHP 代码评估表达式并返回 true 或 false。我不知道为什么在 JavaScript 中它像三元运算符一样工作。它只是用语言实现的方式吗?
变种东西=假; var somethingelse = (某事 || 321); 警报(其他);// 警报 321
$var = '123'; $其他 = ($var || 321); 回声$其他;// 打印 1
谢谢!
有人可以向我解释为什么下面的 javascript 代码会产生 321 的警报,而 PHP 代码会产生 1。
我知道 PHP 代码评估表达式并返回 true 或 false。我不知道为什么在 JavaScript 中它像三元运算符一样工作。它只是用语言实现的方式吗?
变种东西=假; var somethingelse = (某事 || 321); 警报(其他);// 警报 321
$var = '123'; $其他 = ($var || 321); 回声$其他;// 打印 1
谢谢!
它只是用语言实现的方式吗?
是的,JavaScript 做的有点不同。该表达式(something || 321)
表示如果something
是假值,321
则使用默认值代替。
在条件表达式中像往常一样||
充当逻辑OR
,但实际上它执行相同的合并操作。您可以使用以下方法对此进行测试:
if ((0 || 123) === true)
alert('0 || 123 evaluates to a Boolean');
else
alert('0 || 123 does not evaluate to a Boolean');
在 PHP 中,||
运算符执行逻辑OR
并给出布尔结果,仅此而已。
我实际上很惊讶 javascript 也没有 alert 1 或 true 。您想要的 js 语法是:
var somethingelse = something || 321;
将括号括在某事物上会将其评估为真/假。对于 php,你在说:
//$other will equal true if $var is true or 321 is true.
$other = ($var || 321);
php 中的匹配语句如下所示:
$other = ($var) ? $var : 321;
只是添加 boltClock 答案,因为我无法发表评论 - 如果您希望它是一个布尔值,您可以将其解析为 bool,如下所示:
var somthing = !!(somthingelse || 321);
在 PHP($var || 321);
中被评估并分配给$other
.
你可以在 PHP 中使用它。
($other = $var) || $other = 321;
更新:正如 BoltClock 在 Javascript 中所说,如果为 false var somethingelse = (something || 321)
,则试图为变量分配默认值。something