2

我正在查看已最小化的某人的 javascript 代码,但我看到的语法没有任何意义。

firstObject.init = function() {
  void 0 === secondObject.properties && thirsObject.reportError("Something is wrong");
  firstObject.doSomething();
}

我的猜测是,packer 正在检查一个未定义的属性,在这种情况下打破执行上下文并返回 null。

if (secondObject.properties === undefined) {
  thirdObject.reportError("Something is wrong");
  return NULL;
}

这里发生了什么?

4

1 回答 1

2

如果你看一下void 0它的结果很快就会清楚发生了什么:

> void 0
undefined

因此,写

void 0 === secondObject.properties

只是一种不同的写作方式

typeof secondObject.properties === "undefined"

这会结束函数的执行,还是在执行 && 运算符右侧的代码后继续执行?

条件评估通常是懒惰的“短路”,也就是说,如果已经确定某个条件将评估为真或假,则不再评估进一步的子条件。例如:

false && alert("foo"); // Will never alert foo
true && alert("foo"); // Will always alert foo

如果您有任何两个由&&运算符组合的条件,如果第一个(左)条件为假,则无论其值如何,整个条件都将为假。因此,第二个条件的评估是不必要的,因此被丢弃。

更多信息:

于 2013-01-30T11:41:10.497 回答