繁体   English   中英

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

[英]Short-Circuit Evaluation of Logical Expressions in JavaScript

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

与许多语言一样,一旦解释器具有足够的信息来推断结果,JavaScript就会使逻辑AND(&&)逻辑OR(||)表达式的求值短路 例如,如果||第一个表达式 operation为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) )

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

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

这背后的原因是什么?

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

(x << 5)同样为零,因为x现在为零,因此第二条语句中的y ++也不会执行。 y的值为10,因为没有执行y ++。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM