2016-12-15 1 views
0

基本的にはタイトルです。そのような構成は悪い習慣を考慮したか、またはjavascriptで予期しない動作につながる可能性がありますか?"if(somestring in {'oneoption':false、 'secondoption':false})"はJavaScriptの悪い練習とみなされますか?

if (e.target.name in {name: '', number: ''}) { 
    // do something 
} 

それはHTMLNode属性名を場合はそれがない場合には、「オブジェクト」キーと進行に存在するチェックします。クリックされたものが必要なものかどうかの基本チェック。 これは、このようなものよりも優れたパフォーマンスを示しますか?

if(['name','number'].some(a=>a==e.target.name)) { 
    // do something 
} 

タイピングとパフォーマンスの両方をチェックする最適な方法はありますか?

+1

これは、コードのレビューサイトでより良い結果を得る可能性があります。 –

+0

コードをマイクロベンチマークするための小さなNode.jsプログラムを作成します。しかし、実際のアプリケーションでは、速度の差はごくわずかです(DOM以外のものはすべてコストが高いため)。 –

+1

で '「のtoString」{「FOO」:「」}' – epascarello

答えて

1

はい、それはすべてのプロトタイプチェーン内にinオペレータをチェックするので問題となることがあり、したがって、あなたは、予想外のポジティブを得ることができます。

"constructor" in {name: '', number: ''} // true !! 

それでも一定のパフォーマンスをしたいが、小さなケースにArray#includesはおそらくより読みやすくなっている場合は、セットを使用することができます。

new Set(['name', 'number']).has(e.target.name); 
['name', 'number'].includes(e.target.name); 
+0

DOM要素のタグ名は組み込みオブジェクト関数の1つですが、そうは考えにくいです。 –

+0

@FelixKling OPは 'tagName'ではなく' name'を使います。値は任意の文字列にすることができるので、 'Object.prototype'に現れる可能性があります。 – Oriol

+0

私は訂正しました! –

関連する問題