你確定見到過這樣的代碼: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