我有這樣的語句:有沒有更快的方法來編寫條件語句?
if(window.location.hash != '' && window.location.hash != '#all' && window.location.hash != '#')
我可以寫,所以我只需要提window.location.hash
一次?
我有這樣的語句:有沒有更快的方法來編寫條件語句?
if(window.location.hash != '' && window.location.hash != '#all' && window.location.hash != '#')
我可以寫,所以我只需要提window.location.hash
一次?
明顯的方式搞亂做,這是這可能會破壞:
var h = window.location.hash;
if (h != '' && h != '#all' && h != '#')
您可以使用運營商和對象文本:
if (!(window.location.hash in {'':0, '#all':0, '#':0}))
這部作品通過測試對象的鍵(0的只是填料)。
還要注意的是,如果你是object
的原型
使用數組將是整潔(不需要填充0)解決方案,但是IE沒有'indexOf',所以我想這是更好的 – 2010-11-16 05:42:29
你真正需要的'!'? '0'是不是完成了?快速[搜索](http://snippets.dzone.com/posts/show/6557)建議在簡單的「或」情況下使用'1',所以我猜「0」會否定它? – 2010-11-16 05:51:57
@Isaac 0的意義不大,'in'只是檢查鍵。 – cobbal 2010-11-16 05:54:37
正則表達式?事實並非如此可讀,但足以簡潔:
if (/^(|#|#all)$/.test(window.location.hash)) {
// ...
}
這也適用於:
if (window.location.hash.match(/^(|#|#all)$/)) {
// ...
}
...但它的效率較低,每Ken的評論。
爲了完全準確,第二個示例應該使用'search'而不是'match',並且都應該測試值== -1。字符串的「搜索」方法與RegExp的「test」方法相當,而其「匹配」方法與RegExp的「exec」方法相當。 'match'和'exec'比較慢,但提供更多信息(或者不匹配時爲null),而search和test只是給出第一個匹配開始的字符串的索引比賽)。 – 2010-11-16 06:11:00
'RegExp.test'返回一個布爾值,而不是索引。不過,我同意你的評論的其餘部分。我的第二個例子效率稍低,但比您提出的替代方案更具可讀性 - 我猜,簡潔是問題的關鍵。 – harto 2010-11-16 23:35:52
對較新的瀏覽器使用indexOf
,併爲舊版瀏覽器提供了一個實現,您可以找到here。
// return value of -1 indicates hash wasn't found
["", "#all", "#"].indexOf(window.location.hash)
只是一個加法,因爲除了相當好多種不要重複自己辦法,沒有人提到:
在瀏覽器中,
window
是Global
對象,所以就把它砍下來,如果你不 有另一個屬性"location"
在當前範圍 (不太可能)。location.hash
足夠
我覺得這是好事,檢查長度,因爲第一個字符始終是一個哈希值。
var h = location.hash;
if (h.length > 1 && h != '#top')
+1。很好很簡單 – cobbal 2010-11-16 05:44:27
我傾向於使用局部變量這種方式很多。它也使調試更容易。 – 2010-11-16 21:26:49