與或 你真的了解嗎?
&& 和 || 在表達式1和表達式2之間其實是技巧的,熟練了,秒答
首先來看下&&(雙與) X && Y? 在這個表達式中首先計算X,并將其解釋為一個布爾值:
如果這個布爾值(X的布爾值)為false,那么返回false 不再計算Y,因為"與"的條件已經(jīng)失效
如果這個布爾值(X的布爾值)為true, 那么我們?nèi)匀徊恢?X && Y 的值是真還是假,直到我們?nèi)ビ嬎鉟 ,并把它也解釋為一個布爾值;不過有意思的是當X 為 true 時,整個將直接返回 Y
再來看看 ||(雙或) 在 X || Y 的時候,還是首先計算X并將其解釋執(zhí)行一個布爾值:
如果這個布爾值(X的布爾值)為true 那么將返回X,不再計算Y 因為"或"的條件已經(jīng)滿足
如果這個布爾值為false 那么我們?nèi)匀徊恢繶 || Y 是真還是假,直到我們計算 Y, 并且也把它解釋為一個執(zhí)行的布爾值
因此? 0 || 1 的計算結(jié)果為true(1)
表達式1 && 表達式2 和 表達式1 || 表達式2 只需要判斷第一個表達式的值:
||: 第一個表達式為真 ,直接返回表達式1
第一個表達式為假 ,直接返回表達式2
&&: 第一個表達式為假 ,直接返回表達式1
第一個表達式為真 ,直接返回表達式2
故 簡稱: 或 真1 假2? 與 假1 真2
console.log(1 && false);? //與 假1 真2 false
console.log(0 || NaN); //或 真1 假2 NaN
console.log(null && undefined); //與 假1 真2 null
console.log(false && null); //與 假1 真2 false
console.log(undefined || 0); //或 真1 假2 0
console.log(NaN || 1); //或 真1 假2 1
console.log(1 && null); //與 假1 真2 null
console.log(2 || NaN); //或 真1 假2 2
console.log(3 && false); //與 假1 真2 false
console.log(NaN || 0); //或 真1 假2 0
console.log(undefined && 2); //與 假1 真2 undefined
console.log(null && 3); //與 假1 真2 null
console.log(false || 7); //或 真1 假2 7
