我正在尝试了解以下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文件中获取这行代码,
但我觉得很难理解
这一行中&&
,
===
的含义是什么?
如何让这一行更具可读性?
答案 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;
您可能不知道:
falsy && anything
短路评估为falsy
truly || anything
的短路评估为truly
。逻辑规则保证这些评估始终如此 正确。请注意,上述表达式的
anything
部分不是 评估,所以这样做的任何副作用都不会生效。
逗号运算符允许在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;