2014-08-28 56 views
-3

我想了解以下JavaScript什麼是&&,===意味着一行?

this.Var1 && Obj1.Var1 && (Obj1.Var2 = this.Obj1.Func1(Obj1.Var1), Obj1.Var3 = this.Obj1.Func2(Obj1.Var1), this.Func1(Obj1.Var1)), Obj1.Var4 === "String1" && (Obj1.Var5 = Func1(Obj1.Var5)), this.Func2(Obj1) && this.Func3("String2").pushObject(Obj1), x = this.get("String2.length"), o = x - y; 

我得到這一行從精縮的JavaScript文件中的代碼,

但我覺得很難理解

什麼做的那些&&,===平均在這一行的JavaScript?

如何讓這條線更具可讀性?

+0

它們的意思幾乎他們當表達分佈在多行同樣的事情。閱讀縮小的JavaScript總是會很痛苦。你可以使用http://jsbeautifier.org讓它看起來更好一點。 – Pointy 2014-08-28 18:53:33

+3

您可能想從非縮小代碼開始 – 2014-08-28 18:54:28

+0

嘗試Google搜索「javascript &&」,然後「javascript ===」有很多優秀的定義可以找到。首先嚐試一些bsic javascript教程或引物。 – otherDewi 2014-08-28 18:58:53

回答

0

首先,我們更好的格式化代碼來理解它:

this.Var1 && Obj1.Var1 && (
    Obj1.Var2 = this.Obj1.Func1(Obj1.Var1), 
    Obj1.Var3 = this.Obj1.Func2(Obj1.Var1), 
    this.Func1(Obj1.Var1) 
), 
(Obj1.Var4 === "String1") && (Obj1.Var5 = Func1(Obj1.Var5)), 
this.Func2(Obj1) && this.Func3("String2").pushObject(Obj1), 
x = this.get("String2.length"), 
o = x - y; 

你可能不知道的:

  • Short-circuit evaluation

    falsy && anything是短路評價到falsy
    truly || anything被短路評估爲truly

    邏輯規則保證這些評估總是 正確。請注意,上述表達式的anything部分不是 評估,所以這樣做的任何副作用不會生效。

  • Comma operator

    逗號運算符允許多個表達式在 單個語句進行評價,並返回最後一個表達式的結果。

然後,代碼相當於

if (this.Var1) { 
    if (Obj1.Var1) { 
     Obj1.Var2 = this.Obj1.Func1(Obj1.Var1); 
     Obj1.Var3 = this.Obj1.Func2(Obj1.Var1); 
     this.Func1(Obj1.Var1); 
    } 
} 
if (Obj1.Var4 === "String1") { 
    Obj1.Var5 = Func1(Obj1.Var5); 
} 
if (this.Func2(Obj1)) { 
    this.Func3("String2").pushObject(Obj1); 
} 
x = this.get("String2.length"); 
o = x - y; 
+0

這意味着'''用'()'替換'{}'來將多個if語句連接成一行? – kitlee 2014-08-29 05:18:53

+0

和'foo &&(bar)'總是等於'if(foo){bar}'? – kitlee 2014-08-29 05:20:53

+0

'foo &&(bar)'相當於'(function(){var value; if(value = foo){value = bar;} return value;})()'。但是,如果你不關心返回的值,就像'if(foo){bar; }' – Oriol 2014-08-29 16:31:53

3

&&是邏輯和操作者和

===是一個嚴格相等比較,這兩個類型和值進行比較。

+0

多次出現在同一行中時,它們的含義是什麼? – kitlee 2014-08-28 19:09:53

0

對於逗號,你可以用它們在聲明一行多個變量:

var x = 1, y = 2; 

邏輯和運營商保持代碼去行。所以,如果你有:如果x等於1三重

x == 1 && callMethod() 

callMethod只是援引通常等於檢查對象類型爲好。所以:

x == "1" 

是真的

x === "1" 

是假的。

+0

'x == 1 && callMethod()'是否意指'if(x == 1)callMethod()'? – kitlee 2014-08-28 19:23:04