2016-12-15 56 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」in {「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元素標籤名稱是內置對象函數之一,但這不太可能。 –

+0

@FelixKling OP使用'name',而不是'tagName'。該值可以是任意字符串,因此可能會出現在Object.prototype中。 – Oriol

+0

我站好了! –

相關問題