|| の束と連結された長い if 条件を使用する代わりに、変数の値が複数の値のいずれかであるかどうかを確認する最も効率的な方法に関する推奨事項。(OR)?
のようなものを見ましたif (value in {'thing1':1, 'thing2':1, 'thing3':1})
が、それがどのように機能するかは完全にはわかりません。
何とin
みなされますか?オペレーター?
|| の束と連結された長い if 条件を使用する代わりに、変数の値が複数の値のいずれかであるかどうかを確認する最も効率的な方法に関する推奨事項。(OR)?
のようなものを見ましたif (value in {'thing1':1, 'thing2':1, 'thing3':1})
が、それがどのように機能するかは完全にはわかりません。
何とin
みなされますか?オペレーター?
値が文字列でない場合、in
またはJavascript で複数の条件を 1 つに結合するindexOf
に示されている方法を使用すると、チェーン OR テストよりも効率が大幅に低下します。これらは両方とも、値を文字列に変換して文字列比較を行う必要があるためです。 . ほとんどの場合、変数をネイティブ値と比較する方が効率的です。
パターンに一致しない値を探していると仮定すると (テスト番号が奇数か 2 のべき乗かを調べるなど)、連鎖 OR テストの速度を向上させるためにできることはわずかです。たとえば、最も可能性の高い値を最初にテストすると、全体的なパフォーマンスが向上します。たとえば、X が 7 よりも 5 であることが多い場合、次のようになります。
if (X == 5 || X == 7)
長期的には、以下よりも効率的です。
if (X == 7 || X == 5)
式が真になると条件テストが終了するためです。
値が文字列であると仮定すると、 in
andindexOf
メソッドは、同様に構築された連鎖 OR よりも効率的ではなく、ブラウザーの気まぐれを考えると、さらに悪い可能性があります。テストする値のパターンを特定できない限り、一致する値が見つかるまですべての値をチェックすることはできません。