有人可以向我解释为什么以下javascript代码会生成321警报,而PHP代码会产生1。
我知道PHP代码会计算表达式并返回true或false。我不知道的是,为什么在JavaScript中它像三元运算符一样工作。这只是用语言实现的方式吗?
var something = false; var somethingelse = (something || 321); alert(somethingelse); // alerts 321
$var = '123'; $other = ($var || 321); echo $other; // prints 1
谢谢!
答案 0 :(得分:3)
这是用语言实现的方式吗?
是的,JavaScript的做法有点不同。表达式(something || 321)
表示如果something
的值为falsy,则会使用默认值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
并给出布尔结果,没有别的。
答案 1 :(得分:0)
我真的很惊讶javascript没有提醒1或者也是如此。你想要的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;
答案 2 :(得分:0)
只是添加了boltClock的答案,因为我无法评论 - 如果你想要它是一个布尔值,你可以将它解析为bool:
var somthing = !!(somthingelse || 321);
答案 3 :(得分:0)
在PHP ($var || 321);
中评估并分配给$other
。
您可以在PHP中使用它。
($other = $var) || $other = 321;
更新:正如BoltClock在Javascript var somethingelse = (something || 321)
中所说的,如果something
为假,则试图为变量分配默认值。