js 利用||和&&賦值小技巧

nayi_224發表於2018-05-24

對於需要返回boolean型別數值的地方,比如if判斷,邏輯運算子,js物件會預設轉換為boolean型別資料。null,undefined,0,”“返回false,其他返回true。

同時,對於||與&&又有這樣的特性:

var a = b || c;

b預設值 c預設值 a取值
true true b
true false b
false true c
false false c

var a = b && c;

b預設值 c預設值 a取值
true true c
true false c
false true b
false false b

根據這兩個特性,可以利用||與&&進行賦值。在某些情況下,可以簡化程式碼,甚至是增加可讀性。

下面給出的幾組程式碼內的b與c的賦值是等效的。

    var b;

    if(b != null){
        b = b;
    }else {
        b = 2;
    }

    var c = c || 2; 
    var b;

    if(b){
        b = 1;
    }else {
        b = 2;
    }

    var c = (c && 1) || 2;
    var b;

    if(b){
        if(1 == 1){
            b = 1;
        }else {
            b = 2;
        }
    }else {
        b = 3;
    }

    var c = (c && ((1 == 1 && 1) || 2)) || 3;
    var b;

    if(2 > 1){
        b = 1;
    }else if(3 > 1){
        b = 2;
    }else {
        b = 3;
    }

    var c = ((2 > 1) && 1) || ((3 > 1) && 2) || 3;
    var b;

    if(2 > 1){
        b = 1;
    }else if((1 == 1 || 1 == 2) && 3 == 3){
        b = 2;
    }else {
        b = 3;
    }

    var c = ((2 > 1) && 1) || (((1 == 1 || 1 == 2) && 3 == 3) && 2) || 3;

簡單說一下技巧,就是if->值 用&&,else用||,if中內容多的可以將內容都寫進括號裡。

在實際使用中,只有最簡單的邏輯判斷使用這種方法有實際意義,這會使程式碼更簡潔。事實上,很多知名的js框架都充滿了這種用法。至於後面那些個寫法,別用!!!寫出來容易被打。

相關文章