[英]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.