PHP和JS评估变量的区别

时间:2011-03-23 22:21:59

标签: php javascript evaluation internals ternary

有人可以向我解释为什么以下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

谢谢!

4 个答案:

答案 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为假,则试图为​​变量分配默认值。