1. 程式人生 > >javascript中的&& ||

javascript中的&& ||

span logs pre 值轉換 是否 tab 運算 lock block

你是否看到過這樣的代碼:a=a||""; 可能javascript初學者會對此感到茫然。

其實:

a=a||"defaultValue";

與:

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

和:

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

是等價的! 為了弄清這個問題,首先我們必須了解一個問題:javascript中數據類型在轉換為bool類型時發生了什麽。

在javascript中,數據類型可以分為“真值”和“假值”。顧名思義,真值轉換為bool時值為true;假值轉換為bool時值為false。下表羅列了一些常見的數據類型轉換為bool時的值:

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

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

於是有了:

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

下面我們再來看“&&”、“||”兩個表達式。

由於javascript是弱類型語言,所以在javascript中這兩個表達式可能跟其他語言(比如java)中不太一樣。

在javascript中,“&&”運算符運算法則如下:

如果&&左側表達式的值為真值,則返回右側表達式的值;否則返回左側表達式的值。

這就是說:

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

“||”運算符的運算法則如下:

如果||左側表達式的值為真值,則返回左側表達式的值;否則返回右側表達式的值。

這就是說:

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

於是,就可以理解:a=a||"defaultValue";的邏輯了。如果a為假值(等於null、空字符串……),則將"defaultValue"賦給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)//真值操作

javascript中的&& ||