您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“es6中有&符號嗎”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
有&符號。在es6中,“&&”是邏輯與運算符,是一種AND布爾操作,語法為“操作數(shù)1 && 操作數(shù)2”;只有兩個操作數(shù)都為true時,才返回true,否則返回false。邏輯與是一種短路邏輯,如果左側(cè)表達(dá)式為 false,則直接短路返回結(jié)果,不再運算右側(cè)表達(dá)式。
es6中有&符號,“&&”是邏輯與運算符。
邏輯與運算&&
邏輯與運算(&&)是 AND 布爾操作。只有兩個操作數(shù)都為 true 時,才返回 true,否則返回 false。具體描述如表所示。
第一個操作數(shù) | 第二個操作數(shù) | 運算結(jié)果 |
---|---|---|
true | true | true |
true | false | false |
false | true | false |
false | false | false |
邏輯與是一種短路邏輯,如果左側(cè)表達(dá)式為 false,則直接短路返回結(jié)果,不再運算右側(cè)表達(dá)式。運算邏輯如下:
第 1 步:計算第一個操作數(shù)(左側(cè)表達(dá)式)的值。
第 2 步:檢測第一個操作數(shù)的值。如果左側(cè)表達(dá)式的值可轉(zhuǎn)換為 false(如 null、undefined、NaN、0、""、false),那么就會結(jié)束運算,直接返回第一個操作數(shù)的值。
第 3 步:如果第一個操作數(shù)可以轉(zhuǎn)換為 true,則計算第二個操作數(shù)(右側(cè)表達(dá)式)的值。
第 4 步:返回第二個操作數(shù)的值。
示例1
下面代碼利用邏輯與運算檢測變量并進(jìn)行初始化。
等效于:var user; //定義變量
(! user && console.log("沒有賦值")); //返回提示信息“沒有賦值”
var user; //定義變量
if (! user){ //條件判斷
console.log("變量沒有賦值");
}
如果變量 user 的值為 0 或空字符串等假值轉(zhuǎn)換為布爾值時,則為 false,那么當(dāng)變量賦值之后,依然提示變量沒有賦值。因此,在設(shè)計時必須確保邏輯與左側(cè)的表達(dá)式返回值是一個可以預(yù)測的值。
var user = 0; //定義并初始化變量
(! user && console.log("變量沒有賦值")); //返回提示信息“變量沒有賦值”
右側(cè)表達(dá)式不應(yīng)該包含賦值、遞增、遞減和函數(shù)調(diào)用等有效運算,因為當(dāng)左側(cè)表達(dá)式為 false 時,則直接跳過右側(cè)表達(dá)式,會給后面的運算帶來潛在影響。
示例2
使用邏輯與運算符可以代替設(shè)計多重分支結(jié)構(gòu)。
var n = 3;
(n == 1) && console.log(1);
(n == 2) && console.log(2);
(n == 3) && console.log(3);
( ! n ) && console.log("null");
上面代碼等效于下面多重分支結(jié)構(gòu)。
var n = 3;
switch(n){
case1:
console.log(1);
break;
case2:
console.log(2);
break;
case3:
console.log(3);
break;
default:
console.log("null");
邏輯與運算的操作數(shù)可以是任意類型的值,并返回原始表達(dá)式的值,而不是把操作數(shù)轉(zhuǎn)換為布爾值再返回。
1) 對象被轉(zhuǎn)換為布爾值時為 true。例如,一個空對象與一個布爾值進(jìn)行邏輯與運算。
console.log(typeof ({} && true)); //返回第二個操作數(shù)的值 true的類型:布爾型
console.log(typeof (true && {})); //返回第二個操作數(shù)的值 {}的類型:對象
2) 如果操作數(shù)中包含 null,則返回值總是 null。例如,字符串 "null" 與 null 類型值進(jìn)行邏輯與運算,不管位置如何,始終都返回 null。
console.log(typeof ("null" && null)); //返回null的類型:對象
console.log(typeof (null && "null")); //返回null的類型:對象
3) 如果操作數(shù)中包含 NaN,則返回值總是 NaN。例如,字符串 "NaN" 與 NaN 類型值進(jìn)行邏輯與運算,不管位置如何,始終都返回 NaN。
console.log(typeof ("NaN" && NaN)); //返回NaN的類型:數(shù)值
console.log(typeof (NaN && "NaN")); //返回NaN的類型:數(shù)值
4) 對于 Infinity 來說,將被轉(zhuǎn)換為 true,與普通數(shù)值一樣參與邏輯與運算。
console.log(typeof ("Infinity" && Infinity)); //返回第二個操作數(shù)Infinity的類型:數(shù)值
console.log(typeof (Infinity && "Infinity")); //返回第二個操作數(shù)"Infinity"的類型:字符串
5) 如果操作數(shù)中包含 undefined,則返回 undefined。例如,字符串 "undefined" 與 undefined 類型值進(jìn)行邏輯與運算,不管位置如何,始終都返回 undefined。
console.log(typeof ("undefined" && undefined)); //返回undefined
console.log(typeof (undefined && "undefined")); //返回undefined
擴(kuò)展知識:ES6中&&和 __ 鮮為人知的騷操作
眾所周知,在es6中,邏輯運算符&&代表與條件,||代表或條件
let info = {
name:"long",
age:null
};
//&&
//info的name與age同時為真,則結(jié)果為真
if(info.name && info.age){
console.log("與條件"); //與條件
}else{
console.log("失敗");
}
//||
//info的name或age,只要有一個為真,則結(jié)果為真
if(info.name || info.age){
console.log("或條件"); //或條件
}else{
console.log("失敗");
}
代替if/else
但是,他們還可以代表if/else進(jìn)行簡化
let info = {name:"long"};
let name = info && info.name; //long
let isVip = false;
let vipPrice = isVip || 19;//19
decide() && true();
//如果decide()執(zhí)行后為true,則執(zhí)行true(),并輸出true()的值;如果decide()執(zhí)行后為false,則輸出decide()執(zhí)行后的結(jié)果,且不執(zhí)行true()
//預(yù)計使用場景,有一個mongo查詢條件where,當(dāng)name存在時,匹配name數(shù)據(jù)
where= {age:19};
name && where.name = name;
decide() || false();
//如果decide()執(zhí)行后為true,則執(zhí)行decide(),并輸出decide()的值,fasle()不執(zhí)行;如果decide()執(zhí)行后為false,則執(zhí)行fasle(),且輸出false()的結(jié)果
decide() && true() || fasle();
//如果decide()執(zhí)行后為true,則執(zhí)行true(),并輸出true()的值;
//如果decide()執(zhí)行后為false,則執(zhí)行false(),并輸出false()的值
“es6中有&符號嗎”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。