Java 学习

js中逻辑运算符&&、||同时存在的思考

2019-01-09  本文已影响0人  思我恋

在掘金上碰到一个有趣的问题 true || false && false这个结果是啥
答案是true

why?
最初的结论是:&&的逻辑运算符的优先级高于||
然而最后结论是短路运算的结果。

image.png

短路运算

&&表达式1 && 表达式2

表达式1 为true时,返回表达式2
表达式1 为false时,返回表达式1,且不会执行表达式2

||表达式1 || 表达式2

表达式1 为true时,返回表达式1,且不会执行表达式2
表达式1 为false时,返回表达式2

又去查了一堆资料,又碰到个奇怪的问题。

true || alert(2) && false        // 结果为true,alert(2)并没有执行

如果按优先级来不应该会执行alert(2)吗?

再来个问题:

false && false || alert(1)      // 结果弹窗1,执行了alert(1)

如果按从左往右的顺序执行,短路运算生效,应该不会执行alert(1)

经过与一位Java同事的讨论,最后得出如下结论:
遇到||运算符,先去左边的表达式得出结果,如果结果为true,则不会去执行右边的表达式,则短路运算生效;如果结果为false,则去执行右边的表达式,再去根据两边的结果去执行||运算符

当同时存在多个||时,从左到右,一一执行上述规则。

上一篇下一篇

猜你喜欢

热点阅读