1、邏輯非 邏輯非用!表示,可以套用與ECMAScript的任何類型的值,邏輯非操作傳回的是一個布林值(true/false)。這個運算子首先會將它的運算元轉換為一個布林值,然後再對其求反。
以下說明下Boolean()轉換函數的一組規則。
数据类型 |
转换为true的值 |
转换为false的值 |
Boolean |
true |
false |
String |
任何非空字符串 |
""(空字符串) |
Number |
任何非零数字值(包括无穷大) |
0和NaN |
Object |
任何对象 |
null |
Undefined |
无 |
undefined |
資料型別
|
轉換為true的值
|
轉換為false的值 |
Boolean |
true |
false
|
String |
任何非空字串 |
""(空字串)
|
Number |
任何非零數字值(包括無限大) |
0和NaN
|
Object |
任何物件 |
null
|
Undefined |
無 |
undefined
|
Boolean()轉換函數的簡便表示方法。 -----------! !
2.邏輯與
3. 如果兩個運算子都是對象,則傳回第二個運算元; 遵循第一規則。
4. 如果有一個操作是null,則回傳null;
5. 如果有一個操作符是NaN,則傳回NaN;
6. 如果有一個運算子是undefined,則傳回undefined。
邏輯與操作屬於短路操作,也就是如果第一操作數能夠決定結果,那麼就不會再對第二個操作數求值。 (可以理解為內部的兩個return操作)。因此當4、5、6規則衝突時,遵循短路操作原則。
複製程式碼
程式碼如下: var nul = null; na = NaN;
var test;
test = na&&nul;
document.write(test); //NaN
複製程式碼
程式碼如下:
因此,我們來總結一下。 && 操作主要遵循幾個原則:
1.短路操作原則;
2. 求值過程中會被轉換產生副本,但是回傳值是原來值;
複製程式碼
程式碼如下:
// 偽代碼
function &&(param1,param2){
bparam1 = Boolean(param1);
if (!bparam1) return param1;
bparam2 = Boolean(param2); return param2; } // 參數是一個物件時傳回引用的指標值,函數同 3、邏輯或 邏輯或符號以兩個垂直線符號(||)表示。 邏輯或符號同樣是短路操作符。其實作過程可以參照邏輯與的偽代碼。這裡就不再列出一些規則了。 邏輯或常用來做參數的預設處理,例如 evt = evt || window.event;