溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

es6中有&符號嗎

發(fā)布時間:2022-11-02 09:43:54 來源:億速云 閱讀:110 作者:iii 欄目:web開發(fā)

本篇內(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é)果
truetruetrue
truefalsefalse
falsetruefalse
falsefalsefalse

邏輯與是一種短路邏輯,如果左側(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ì)量的實用文章!

向AI問一下細(xì)節(jié)

免責(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)容。

es6
AI