es6中有沒有&符號

2022-11-01 22:01:24

有&符號。在es6中,「&&」是邏輯與運運算元,是一種AND布林操作,語法為「運算元1 && 運算元2」;只有兩個運算元都為true時,才返回true,否則返回false。邏輯與是一種短路邏輯,如果左側表示式為 false,則直接短路返回結果,不再運算右側表示式。

前端(vue)入門到精通課程:進入學習
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API偵錯工具:

本教學操作環境:windows7系統、ECMAScript 6版、Dell G3電腦。

es6中有&符號,「&&」是邏輯與運運算元。

邏輯與運算&&

邏輯與運算(&&)是 AND 布林操作。只有兩個運算元都為 true 時,才返回 true,否則返回 false。具體描述如表所示。

邏輯與運算
第一個運算元第二個運算元運算結果
truetruetrue
truefalsefalse
falsetruefalse
falsefalsefalse

邏輯與是一種短路邏輯,如果左側表示式為 false,則直接短路返回結果,不再運算右側表示式。運算邏輯如下:

  • 第 1 步:計算第一個運算元(左側表示式)的值。

  • 第 2 步:檢測第一個運算元的值。如果左側表示式的值可轉換為 false(如 null、undefined、NaN、0、""、false),那麼就會結束運算,直接返回第一個運算元的值。

  • 第 3 步:如果第一個運算元可以轉換為 true,則計算第二個運算元(右側表示式)的值。

  • 第 4 步:返回第二個運算元的值。

範例1

下面程式碼利用邏輯與運算檢測變數並進行初始化。

var user;  //定義變數
(! user && console.log("沒有賦值"));  //返回提示資訊「沒有賦值」
登入後複製

等效於:

var user;  //定義變數
if (! user){  //條件判斷
    console.log("變數沒有賦值");
}
登入後複製

如果變數 user 的值為 0 或空字串等假值轉換為布林值時,則為 false,那麼當變數賦值之後,依然提示變數沒有賦值。因此,在設計時必須確保邏輯與左側的表示式返回值是一個可以預測的值。

var user = 0;  //定義並初始化變數
(! user && console.log("變數沒有賦值"));  //返回提示資訊「變數沒有賦值」
登入後複製

右側表示式不應該包含賦值、遞增、遞減和函數呼叫等有效運算,因為當左側表示式為 false 時,則直接跳過右側表示式,會給後面的運算帶來潛在影響。

範例2

使用邏輯與運運算元可以代替設計多重分支結構。

var n = 3;
(n == 1) && console.log(1);
(n == 2) && console.log(2);
(n == 3) && console.log(3);
( ! n ) && console.log("null");
登入後複製

上面程式碼等效於下面多重分支結構。

var n = 3;
switch(n){
    case1:
        console.log(1);
        break;
    case2:
        console.log(2);
        break;
    case3:
        console.log(3);
        break;
    default:
        console.log("null");
登入後複製

邏輯與運算的運算元可以是任意型別的值,並返回原始表示式的值,而不是把運算元轉換為布林值再返回。

1) 物件被轉換為布林值時為 true。例如,一個空物件與一個布林值進行邏輯與運算。

console.log(typeof ({} && true));  //返回第二個運算元的值  true的型別:布林型
console.log(typeof (true && {}));  //返回第二個運算元的值  {}的型別:物件
登入後複製

2) 如果運算元中包含 null,則返回值總是 null。例如,字串 "null" 與 null 型別值進行邏輯與運算,不管位置如何,始終都返回 null。

console.log(typeof ("null" && null));  //返回null的型別:物件
console.log(typeof (null && "null"));  //返回null的型別:物件
登入後複製

3) 如果運算元中包含 NaN,則返回值總是 NaN。例如,字串 "NaN" 與 NaN 型別值進行邏輯與運算,不管位置如何,始終都返回 NaN。

console.log(typeof ("NaN" && NaN));  //返回NaN的型別:數值
console.log(typeof (NaN && "NaN"));  //返回NaN的型別:數值
登入後複製

4) 對於 Infinity 來說,將被轉換為 true,與普通數值一樣參與邏輯與運算。

console.log(typeof ("Infinity" && Infinity));  //返回第二個運算元Infinity的型別:數值
console.log(typeof (Infinity && "Infinity"));  //返回第二個運算元"Infinity"的型別:字串
登入後複製

5) 如果運算元中包含 undefined,則返回 undefined。例如,字串 "undefined" 與 undefined 型別值進行邏輯與運算,不管位置如何,始終都返回 undefined。

console.log(typeof ("undefined" && undefined));  //返回undefined
console.log(typeof (undefined && "undefined"));  //返回undefined
登入後複製

擴充套件知識:ES6中&&和 __ 鮮為人知的騷操作

眾所周知,在es6中,邏輯運運算元&&代表與條件,||代表或條件

let info = {
  name:"long",
  age:null
};

//&&
//info的name與age同時為真,則結果為真
if(info.name && info.age){
  console.log("與條件"); //與條件
}else{
  console.log("失敗");
}

//||
//info的name或age,只要有一個為真,則結果為真
if(info.name || info.age){
  console.log("或條件"); //或條件
}else{
  console.log("失敗");
}
登入後複製

代替if/else

但是,他們還可以代表if/else進行簡化

let info = {name:"long"};

let name = info && info.name; //long

let isVip = false;
let vipPrice = isVip || 19;//19
登入後複製
decide() && true();

//如果decide()執行後為true,則執行true(),並輸出true()的值;如果decide()執行後為false,則輸出decide()執行後的結果,且不執行true()


//預計使用場景,有一個mongo查詢條件where,當name存在時,匹配name資料
where= {age:19};
name && where.name = name;
登入後複製
decide() || false();

//如果decide()執行後為true,則執行decide(),並輸出decide()的值,fasle()不執行;如果decide()執行後為false,則執行fasle(),且輸出false()的結果
登入後複製
decide() && true() || fasle();

//如果decide()執行後為true,則執行true(),並輸出true()的值;
//如果decide()執行後為false,則執行false(),並輸出false()的值
登入後複製

【相關推薦:、】

以上就是es6中有沒有&符號的詳細內容,更多請關注TW511.COM其它相關文章!