布尔操作符一般具有短路原理:
若第一操作数能决定结果,就不会判断第二操作数
在Javascript中,由于布尔操作符可以应用于任何类型的操作数,所以返回的结果不仅仅是布尔值,这对优化代码提供了一些方法。 合理使用布尔操作数能够减少if…else等语句的使用,大大减少了代码量,增强了代码的简洁性,但也在一定程度降低了可读性。所以,在实际使用中要有所取舍。
前面提过,在Javascript中的逻辑操作数可以是任意类型的,下表列举各类操作数的布尔值:
类型布尔值对象true空字符串false字符串true数值0false非0数值truenullfalseNaNfalseundefinedfalse对上表取反
由于Javascript中操作数可以是不同类型的,当操作数不为false和true的其他类型时,所以会有一些特殊的规则:
当操作数中存在对象时: 第一操作数是对象:返回第二操作数第二操作数是对象:第一操作数是true时返回第二操作数两个操作数都是对象:返回第二操作数 当操作数存在null NaN undefined时: 第一操作数是null:返回null第一操作数是NaN:返回NaN第一操作数是undefined:返回undefined以上归纳过于繁琐,用一个万能公式一:即无论什么类型,当第一操作数的布尔值是true,返回第二类型值,当第一操作数的布尔值是false,返回第一类型值。
同样,以上归纳过于繁琐,用一个万能公式二:即无论什么类型,当第一操作数的布尔值是true,返回第一类型值,当第一操作数的布尔值是false,返回第二类型值。
举例:
if(a > b){ a = a + b; } // 用&&改写 a > b && (a = a + b); // 使用||改写 !(a > b) || (a = a + b)