-3

これは声明です

if( validator(foo) && foo.var1 || foo.var2 || foo.var3 || foo.var4){
    //do sometihng
}else{
    //do anything because if foo.*  doesnt exists i cant do anything
}

ステートメントは次のように述べています。validator は foo を有効にし、true を返す必要があり、var1 または var2 var3 または var4 が存在する必要があります。

説明が必要な場合は、コメントを追加してください。これは簡単な質問ですが、私のコードでパフォーマンスを得ようとしています。

ところで。javascript のパフォーマンス コードに関する情報が記載されている本やチュートリアルはありますか??

皆さん、ありがとうございました!

4

1 に答える 1

4

コストのかかる操作の場合validator(foo)は、テストの順序を逆にすることができます。

if ((foo.var1 || foo.var2 || foo.var3 || foo.var4) && validator(foo)) {
} else {
}

特に費用がかからない場合validator(foo)、この小さなコードのパフォーマンスを改善する方法について考えることに時間を費やす理由はおそらくないでしょう。あなたの時間のより良い使い方があります。

ちなみに、このコードはあなたの口頭説明に基づいています。現状のコードは口頭での説明と互換性がなく、バグがある可能性があります。JavaScript では、 にfalse && false || true評価されtrueます。あなたはおそらく必要です

if( validator(foo) && (foo.var1 || foo.var2 || foo.var3 || foo.var4)) {

また、Benjamin が指摘するように、存在するfoo.var1ことをテストしません。foo.var1それが(プロトタイプチェーン内fooまたはそのプロトタイプチェーン内に)存在し、さらに「偽の」値ではないことを確認します。(たとえば、foo.var1が 0 の場合、 と評価されます。)などfalseを探している可能性があります。foo.hasOwnProperty('var1')

于 2013-05-07T00:36:13.040 に答える