1、逻辑与(&&)
左值和右值都是true时,返回true,两边都是false或者两边的值其中一边是fasle,就返回false;
(false,null,indefined,0,-0,NaN和"")这些都是假值
举个例子如下:
var o = {s:1}; //创建一个对象
var p = null; //创建了一个null
o && o.s //返回1,应为o是真值,所以返回o.s的值
p && p.x //返回null,p是假值,所以不计算p.x,直接返回p的值
2、逻辑或( || )
找到第一个为真的的值就返回,如果都是假值则返回最后一个值,如下:
console.log( null || undefined || NaN); //三个值都是假的 返回最后一个值 NaN;
console.log( 1 || 2 || 3 ); //三个值都是真的返回第一个值 1
console.log( null || 1 || NaN); //从左向右一次寻找,找到为真的值就会立即停止,马上返回;
3、逻辑非(!)
他的作用就是将数的布尔值进行求反
举个栗子:
var a = 1;
var b = -1;
console.log ( ! a ); //返回 -1;
console.log (! b); //返回 1;
如果x是真值,!x返回false,如果x是假值,!x返回true;
返回布尔值时,已经将这些真值,假值转换成了布尔值,再对其进行求反。
逻辑非有一个负负得正的概念,如下:
var a = 1;
console.log ( !! a ); //返回1;
还有一条最重要的就是与或非的优先级,如下:
! > && > ||
console.log( !4 && 6 || undefined); //会先计算优先级最高的 “非!”
其次是“与&&” 最后才是“或||”;
分解如下:
( !4 && 6 || undefined)
( -4 && 6 || undefined);
( 6 || undefined);
最后选择6,返回true;