在掘金上碰到一个有趣的问题 true || false && false这个结果是啥
答案是true
why?
最初的结论是:&&的逻辑运算符的优先级高于||
然而最后结论是短路运算的结果。
短路运算
&&:表达式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,则去执行右边的表达式,再去根据两边的结果去执行||运算符
当同时存在多个||时,从左到右,一一执行上述规则。