第一个操作数 | 第二个操作数 | 结果 |
true |
true |
true |
true | false | false |
false | true | false |
false | false |
false |
一:and(&&)与逻辑运算符
注:如果两边的操作数有一个不是布尔值,与运算就不一定返回布尔值,此时遵循一下规则:
var box={} && (5>4); //true,第一个为对象,返回第二个操作数 var box=(5>4) &&{}; //[object Object],第二个操作数是对象,则第一个操作数返回true,才返回第二个操作数,否则返回false var box=(3>4) &&{}; //false var box=(5>4) && null //null,有一个操作数为null,返回null var box=(5>4) && undefined //undefined
重要:如果第一个操作数为false,那么后面不管是什么都返回false
第一个操作数 | 第二个操作数 | 结果 |
true | true | true |
true | false | true |
false | true | true |
false | false | false |
二:或(||)与逻辑运算
注:如果两边有一个不是布尔值,遵守一下规则:
var box={}||(5>3); //[object Object],第一个操作数为对象,返回第一个 var box=(5>3)||{}; //true var box={}||{}; //[object Object],如果两个都是对象,返回第一个对象 var box=null||null //null,两个为null,返回null var box=NaN || NaN //NaN,两个都是NaN,返回NaN var box=undefined || undefined //undefined,两个为undefined,返回undefined var box=true||age //true,age未定义,第一个为真,返回真 var box=false ||age //出错,age未定义
便利贴:我们可以利用逻辑或运算符这一特性避免为变量赋值null或undefined值
三: 逻辑取反 (!)
var box=!(5>4) //false var box=!{} //false,操作数是一个对象返回false var box=!'' //true,操作数为空字符串返回true var box=!'lee'; //false,非空字符串返回false var box=!0; //true,为0时返回true var box=!8; //false,非0数值包括Infinity,返回false var box=!null //true,null返回true var box=!NaN; //true var box=!undefined; //true