【问题标题】:Short-Circuit Evaluation of Logical Expressions in JavaScriptJavaScript 中逻辑表达式的短路求值
【发布时间】:2015-03-04 23:09:35
【问题描述】:

我正在学习 JavaScript 并正在阅读 JavaScript:完整参考,2012 年第三版。考虑同一本书的摘要。

像许多语言一样,JavaScript 短路 逻辑与 (&&) 的求值>逻辑 OR (||) 表达式一旦解释器有足够的信息来推断结果。例如,如果 || 操作的第一个表达式是 true,那么评估真的没有意义表达式的其余部分,因为无论其他值如何,整个表达式的计算结果都会为真。同样,如果 && 操作的第一个表达式 的计算结果为 false,则无需继续计算右手操作数,因为整个表达式将始终为假。这里的脚本演示了短路评估的效果:

    var x = 5, y = 10;

    // The interpreter evaluates both expressions
    if ( (x >>= 5)  &&  (y++ == 10) )
        document.write("The y++ subexpression evaluated so y is " + y);

    // The first subexpression is false, so the y++ is never executed
    if ( (x << 5) && (y++ == 11) )
        alert("The if is false, so this isn't executed. ");

    document.write("The value of y is still " + y);

我的 O/P 反映为:

The value of y is still 10

而作者为:

The y++ subexpression evaluated so y is 11
The value of y is still 11

我看到这个表达式没有被执行:

if ( (x >>= 5)  &&  (y++ == 10) )

我在 Eclipse IDE 中看到上述表达式中第二个“&”下方的红线:

The entity name must immediately follow the '&' in the entity reference.

这背后的原因是什么?

【问题讨论】:

    标签: javascript logical-operators short-circuiting


    【解决方案1】:

    x 为 5,即二进制 101,因此 (x >>= 5) 为零,x 被赋值为零,并且第一条语句中的 y++ 不被执行。

    (x

    我不知道你的作者从哪里得到 y == 11,这是错误的。

    IDE 错误是一个红鲱鱼 - 它不理解您的文件包含 javascript(或者您错误地分隔了 javascript)并试图将其解析为 XML / HTML。

    【讨论】:

    • (你确定你在打字时没有把 >= 吗?)
    • 哦,我看到那个页面有一个印刷错误。它也用于 document.write(">");和 document.write(">");只能是
      。这仅适用于大于或小于符号。我会标记你的答案。
    猜你喜欢
    • 2013-10-18
    • 2014-12-08
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 2012-11-17
    • 2019-01-13
    • 1970-01-01
    相关资源
    最近更新 更多