JavaScript 中逻辑表达式的短路求值
Short-Circuit Evaluation of Logical Expressions in JavaScript
我正在学习 JavaScript 并阅读 JavaScript:完整参考,第三版 2012 .考虑同一本书的摘要。
像许多语言一样,JavaScript短路一个的评价逻辑与 (&&) 或 逻辑或 (||) 表达式一旦解释器有足够的信息推断结果。例如,如果 || 操作的第一个表达式是 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.
这背后的原因是什么?
x为5,即二进制101,(x >>= 5)因此为0,x赋值为0,第一条语句中的y++不执行。
(x << 5) 同样为零,因为 x 现在为零,因此第二条语句中的 y++ 也不会执行。 y 的值保持为 10,因为没有执行 y++。
我不知道你的作者从哪里得到 y == 11,这是错误的。
IDE 错误是一个转移注意力的错误 - 它不理解您的文件包含 javascript(或者您错误地分隔了 javascript)并试图将其解析为 XML / HTML.
我正在学习 JavaScript 并阅读 JavaScript:完整参考,第三版 2012 .考虑同一本书的摘要。
像许多语言一样,JavaScript短路一个的评价逻辑与 (&&) 或 逻辑或 (||) 表达式一旦解释器有足够的信息推断结果。例如,如果 || 操作的第一个表达式是 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.
这背后的原因是什么?
x为5,即二进制101,(x >>= 5)因此为0,x赋值为0,第一条语句中的y++不执行。
(x << 5) 同样为零,因为 x 现在为零,因此第二条语句中的 y++ 也不会执行。 y 的值保持为 10,因为没有执行 y++。
我不知道你的作者从哪里得到 y == 11,这是错误的。
IDE 错误是一个转移注意力的错误 - 它不理解您的文件包含 javascript(或者您错误地分隔了 javascript)并试图将其解析为 XML / HTML.