短路问题经常是发生在逻辑运算符中的逻辑与(&&)、逻辑或(||)
1、逻辑或(||)
他是一真则真,当逻辑或前面的表达式结果为1或true时,逻辑或后面的表达式是不会执行的
2、逻辑与(&&)
他是一假则假,当逻辑与前面的表达式结果为0或false时,逻辑与后面的表达式是不会执行的
3、小知识点:当一个表达式中既有逻辑与,又有逻辑或,那么先执行逻辑与,逻辑与的优先级比逻辑或高
用几个例子来说明一下
var a=1,b=2,c="博客园";
a || b && c="百度";
console.log(c)
解析:由于上面这个表达式中既有逻辑与,又有逻辑或,所以先执行逻辑与
上面的表达式也就演变成了:a || (b && c="百度"); a=1,所以为true,那么遇到真了,后面的(b && c="百度")这个表达式就不会执行了,自然而然c="百度"这句话就不会执行,所以c="博客园"。
那么如果(a || b) && c="百度"
console.log(c)
解析:因为有了括号,所以先执行括号里的,a=1为true,根据逻辑与的短路,遇到真了后面的依然会继续执行,遇到假的后面才不会执行,所以就变成了 true && c="百度";所以c被重新赋值了,所以c="百度"