有&符號。在es6中,「&&」是邏輯與運算符,是一種AND布林操作,語法為「操作數1 && 操作數2」;只有兩個操作數都為true時,才會傳回true,否則傳回false。邏輯與是一種短路邏輯,如果左側表達式為 false,則直接短路回傳結果,不再運算右側表達式。
本教學操作環境: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中文網其他相關文章!