1、邏輯與(&&)
左值和右值都是true時(shí)媚媒,返回true嗜逻,兩邊都是false或者兩邊的值其中一邊是fasle,就返回false缭召;
(false,null,indefined,0,-0,NaN和"")這些都是假值
舉個(gè)例子如下:
var o = {s:1}; //創(chuàng)建一個(gè)對象
var p = null; //創(chuàng)建了一個(gè)null
o && o.s //返回1栈顷,應(yīng)為o是真值,所以返回o.s的值
p && p.x //返回null嵌巷,p是假值萄凤,所以不計(jì)算p.x,直接返回p的值
2搪哪、邏輯或( || )
找到第一個(gè)為真的的值就返回靡努,如果都是假值則返回最后一個(gè)值,如下:
console.log( null || undefined || NaN); //三個(gè)值都是假的 返回最后一個(gè)值 NaN晓折;
console.log( 1 || 2 || 3 ); //三個(gè)值都是真的返回第一個(gè)值 1
console.log( null || 1 || NaN); //從左向右一次尋找惑朦,找到為真的值就會立即停止,馬上返回漓概;
3漾月、邏輯非(!)
他的作用就是將數(shù)的布爾值進(jìn)行求反
舉個(gè)栗子:
var a = 1;
var b = -1;
console.log ( ! a ); //返回 -1;
console.log (! b); //返回 1胃珍;
如果x是真值梁肿,!x返回false,如果x是假值觅彰,!x返回true吩蔑;
返回布爾值時(shí),已經(jīng)將這些真值填抬,假值轉(zhuǎn)換成了布爾值哥纫,再對其進(jìn)行求反。
邏輯非有一個(gè)負(fù)負(fù)得正的概念,如下:
var a = 1;
console.log ( !! a ); //返回1蛀骇;
還有一條最重要的就是與或非的優(yōu)先級,如下:
! > && > ||
console.log( !4 && 6 || undefined); //會先計(jì)算優(yōu)先級最高的 “非读拆!”
其次是“與&&” 最后才是“或||”擅憔;
分解如下:
( !4 && 6 || undefined)
( -4 && 6 || undefined);
( 6 || undefined);
最后選擇6,返回true檐晕;