有&符號。在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。具體描述如表所示。
第一個運算元 | 第二個運算元 | 運算結果 |
---|---|---|
true | true | true |
true | false | false |
false | true | false |
false | false | false |
邏輯與是一種短路邏輯,如果左側表示式為 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其它相關文章!