JavaScript中逻辑表达式的短路评估

时间:2015-01-07 05:29:52

标签: javascript logical-operators short-circuiting

我正在学习JavaScript并浏览 JavaScript:The Complete Reference,Third Edition 2012 。考虑同一本书中的摘要。

与许多语言一样,JavaScript 短路 评估 逻辑AND(&&) 或者,如果解释器有足够的信息来推断结果,则 逻辑OR(||) 表达式。例如,如果|| 操作的 第一个表达式是 true ,那么评估中没有任何意义表达式的其余部分,因为整个表达式将评估为true,而不管其他值。同样,如果&&的 第一个表达式操作 评估为 false ,无需继续评估右侧操作数,因为整个表达式始终为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) )

我看到第二个&#39;&amp;&#39;在Eclipse IDE中的上述表达式中使用:

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

这背后的原因是什么?

1 个答案:

答案 0 :(得分:2)

x是5,它是二进制101,(x>&gt; = 5)因此为零,x被指定为零,并且第一个语句中的y ++不被执行。

(x <&lt; <5)同样为零,因为x现在为零,因此第二个语句中的y ++也不执行。 y的值保持为10,因为没有执行y ++。

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

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