做什么&& ,===意味着一行?

时间:2014-08-28 18:52:02

标签: javascript

我正在尝试了解以下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文件中获取这行代码,

但我觉得很难理解

这一行中&& , ===的含义是什么?

如何让这一行更具可读性?

3 个答案:

答案 0 :(得分:3)

&&是逻辑和运算符

===是一种严格的相等比较,可以比较类型和值。

答案 1 :(得分:0)

对于逗号,您可以使用它们在一行中声明多个变量:

var x = 1, y = 2;

逻辑和运营商保持代码行。所以如果你有:

x == 1 && callMethod()

只有在x等于1时才调用callMethod.Triple equals通常也会检查对象类型。所以:

x == "1"

是真的

x === "1"

是假的。

答案 2 :(得分: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

      

    逗号运算符允许在a中计算多个表达式   单个语句并返回最后一个表达式的结果。

然后,代码相当于

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;