0

underscore.jsソースで次のコード行に出くわしました。

function (obj, iterator, context) {
  iterator || (iterator = _.identity);
  ...
}

その構文は次と同等ですか?

if (!iterator) {
  iterator = _.identity;
}

ステートメントを1行に減らす以外に、前者の構文を使用することによるパフォーマンス上の利点はありますか?

4

2 に答える 2

2

はい、機能的にはそれと同等です。

この方法で行うことの唯一の利点は、チェックにかかる行が2行少なくなることです。

于 2012-05-23T19:24:26.253 に答える
1

これはブール短絡評価の効果です。基本的に、ブール式の評価は、その結果が決定されるとすぐに停止します。

true || func()

この場合、func()が呼び出されることはありません。これは、返されるものが何であれ、式全体の値が引き続きであるためtrueです。

false && func()

同様に、この場合、func()もまったく呼び出されません。これは、func()が何を返しても、式が残るためfalseです。

于 2012-05-23T19:35:15.820 に答える