0

有人可以向我解释为什么下面的 javascript 代码会产生 321 的警报,而 PHP 代码会产生 1。

我知道 PHP 代码评估表达式并返回 true 或 false。我不知道为什么在 JavaScript 中它像三元运算符一样工作。它只是用语言实现的方式吗?

变种东西=假;
var somethingelse = (某事 || 321);
警报(其他);// 警报 321
$var = '123';
$其他 = ($var || 321);
回声$其他;// 打印 1

谢谢!

4

4 回答 4

3

它只是用语言实现的方式吗?

是的,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并给出布尔结果,仅此而已。

于 2011-03-23T22:23:15.920 回答
0

我实际上很惊讶 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;
于 2011-03-23T22:27:45.847 回答
0

只是添加 boltClock 答案,因为我无法发表评论 - 如果您希望它是一个布尔值,您可以将其解析为 bool,如下所示:

var somthing = !!(somthingelse || 321);
于 2011-03-23T23:06:37.357 回答
0

在 PHP($var || 321);中被评估并分配给$other.

你可以在 PHP 中使用它。

($other = $var) || $other = 321;

更新:正如 BoltClock 在 Javascript 中所说,如果为 false var somethingelse = (something || 321) ,则试图为​​变量分配默认值。something

于 2011-03-23T23:29:12.113 回答