首頁 > web前端 > 前端問答 > es6中有沒有&符號

es6中有沒有&符號

青灯夜游
發布: 2022-11-01 19:24:25
原創
1299 人瀏覽過

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

es6中有沒有&符號

本教學操作環境: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()的值
登入後複製

【相關推薦:javascript影片教學web前端

以上是es6中有沒有&符號的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板