逻辑运算符对操作数进行布尔运算,经常和关系运算符配合使用,逻辑运算符分为逻辑非!
、逻辑与&&
和逻辑或||
,可以应用于任何数据类型
逻辑非
逻辑非用!
表示,它会先把操作数转为布尔值,然后再取反。如果同时使用两个逻辑非操作符,则相当于使用Boolean()
转型函数。
!!'a'; // true
!!''; // false
!!1; // true
!!0; // false
!!true; // true
!!false; // false
!!null; // false
!!undefined; // false
!!NaN; // false
!!{}; // true
!![]; // true
逻辑与
逻辑与用两个和号&&
表示,要两个操作数,当操作数都为true时返回true,否则返回false。
逻辑与可以应用于任何数据类型,当操作数不是布尔值时,返回结果也不一定是布尔值。
逻辑与属于短路操作,如果第一个操作数能决定结果,则不对第二个操作数求值。
逻辑与运算求值过程,如果第一个操作数是false,结果返回第一个操作数;如果第一个操作数是true,无论第二个操作数是true还是false,返回第二个操作数。
'' && 'a'; // ''
'a' && 'b'; // 'b'
'a' && ''; // ''
逻辑与运算符可以连用,返回第一个布尔值为false的表达式
'a' && 'b' && null && ''; // null
关系运算符的优先级高于逻辑与和逻辑或,所以关系表达式可以不加圆括号。
if( a==2 && b==3) {
// todo
}
应用一:代替if语句
if(a === b) {
do()
}
// 等价于
(a === b) && do()
应用二:用于回调函数
function fn(cb) {
if(cb) {
cb()
}
}
// 等价于
function fn(cb) {
cb && cb()
}
逻辑或
逻辑或运算用||
表示,要两个操作数,当两个操作数有都为false时返回false,否则返回true
逻辑或也可以应用于任何数据类型,当操作数不是布尔值时,返回结果也不一定是布尔值。
逻辑或也属于短路操作,如果第一个操作数能决定结果,则不对第二个操作数求值。
逻辑或运算求值过程,如果第一个操作数是true,结果返回第一个操作数;如果第一个操作数是false,无论第二个操作数是true还是false,返回第二个操作数。
'' || 'a'; // 'a'
'a' || 'b'; // 'a'
'a' || ''; // 'a'
逻辑或运算符可以连用,返回第一个布尔值为true的表达式
'a' || 'b' || null || ''; // 'a'
应用:为变量设置默认值
function fn(a) {
var b = a || ''
}