JavaScript - javascript 中的 "||" 與 "&&" 的理解與靈活運

你確定見到過這樣的代碼:a = a||"xxx".javascript

它其實就等價於下面三種形式的代碼:java

a = a || "xxx";

與:算法

if (!a) {
   a = "xxx";
}

和:spa

if (a == null || a == "" || a == undefined) {
    a = "xxx";
}

 

如何理解三種代碼。首先必須理解一個問題: javascript 中的數據類型在與bool類型轉換時候發生了什麼?blog

javascript中,數據類型能夠分爲 「真值」 和 「假值」。也就是說,真值轉換爲bool類型時,爲true; 假值轉換爲bool類型時,爲false。下列爲了一些常見的數據類型轉爲bool類型時的值:ip

數據類型 轉換爲bool後的值
null FALSE
undefined FALSE
Object TRUE
function TRUE
0 FALSE
1 TRUE
0、1以外的數字 TRUE
字符串 TRUE
""(空字符串) FALSE

在 if表達式中,javascript 首先將條件表達式轉換爲bool類型,表達式爲真值則執行 if 中的邏輯, 不然跳過。ci

那麼,再來看看 「&&」 和 「||」 這兩個javascript 表達式。 javascript 是若類型預言,因此在javascript中這兩個表達式可能跟其餘語言中不太同樣。字符串

&& 的運算法則以下:io

若是 && 左側表達式的值爲真值,則返回右側表達式的值;不然返回左側表達式的值。table

也就是說:

var i = "" && "真值"; // -> i = "";
i = "真值" && "其餘真值"; // -> i = "其餘真值"
i = "真值" && ""; // -> i = ""

|| 的運算法則以下:

若是|| 左側表達式的值爲真值,則返回左側表達式的值;不然返回右側表達式的值。

var i = "" || "真值"; // -> i = "真值";
i = "真值" || "其餘真值"; // -> i = "真值"
i = "真值" || ""; // -> i = "真值"

這樣也就能夠理解 a = a || "xxx"; 的邏輯了:若是 a 爲假值 (等於null, 空字符串 "" ....),則 "xxx" 賦給 a; 不然,將 a 的值賦給 a 自己.

 

下面舉例應用,運用 || 和 && 來簡化程序:

var parameter="";  
function test(parameter){  
    //return 真值  
    return true;  
}  
  
//真值操做  
function operate1(parameter){  
    return "真值操做";  
}  
  
//假值操做  
function operate2(parameter){  
    return "假值操做";  
}  
  
var result=test(parameter)&&operate1(parameter);  
result=test(parameter)||operate2(parameter);  
  
//等價於  
result=test(parameter)?operate1(parameter):operate2(parameter);  
  
alert(result); //真值操做  
  
//也等價於  
if(test(parameter)){  
    result=operate1(parameter);  
}else{  
    result=operate2(parameter);  
}  
  
alert(result) //真值操做  

 

JACK

@@ 12/11/2014 NJ USA

相關文章
相關標籤/搜索