【问题标题】:Difference between PHP and JS evaluation of variablesPHP和JS对变量求值的区别
【发布时间】:2011-03-23 22:21:59
【问题描述】:

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

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

var something = false;
var somethingelse = (某事 || 321);
警报(其他); // 警报 321
$var = '123';
$其他 = ($var || 321);
回声$其他; // 打印 1

谢谢!

【问题讨论】:

  • 在javascript“||”中是合并操作符,因为短三元 ($a = $b ?: 1) 带有 5.3

标签: php javascript evaluation internals ternary


【解决方案1】:

这只是语言中实现的方式吗?

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

【讨论】:

    【解决方案2】:

    我真的很惊讶 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;
    

    【讨论】:

    • 括号有没有没关系。
    【解决方案3】:

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

    var somthing = !!(somthingelse || 321);
    

    【讨论】:

      【解决方案4】:

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

      你可以在 PHP 中使用它。

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

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

      【讨论】:

        猜你喜欢
        • 2013-02-13
        • 2013-05-18
        • 2013-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-04
        • 1970-01-01
        相关资源
        最近更新 更多