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"

これで関数の実行が終了しますか、それとも&&演算子の右側のコードを実行した後に続行しますか?

状態評価は通常怠惰「短絡」、つまり、条件がtrueまたはfalseと評価されることがすでに確実である場合、それ以上のサブ条件は評価されなくなります。例えば:

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

演算子によって2つの条件が組み合わされている&&場合、最初の(左側の)条件がfalseの場合、その値に関係なく、条件全体がfalseになります。したがって、2番目の条件の評価は不要であるため、破棄されます。

詳しくは:

于 2013-01-30T11:41:10.497 に答える