我有这样的陈述:
if(window.location.hash != '' && window.location.hash != '#all' && window.location.hash != '#')
我可以写它,所以我只需要提一次window.location.hash
吗?
答案 0 :(得分:7)
显而易见的方法是:
var h = window.location.hash;
if (h != '' && h != '#all' && h != '#')
答案 1 :(得分:6)
您可以使用in运算符和对象文字:
if (!(window.location.hash in {'':0, '#all':0, '#':0}))
这可以通过测试对象的键来实现(0只是填充物)。
另请注意,如果您正在弄乱object
的原型
答案 2 :(得分:3)
正则表达式?不太可读,但足够简洁:
if (/^(|#|#all)$/.test(window.location.hash)) {
// ...
}
这也有效:
if (window.location.hash.match(/^(|#|#all)$/)) {
// ...
}
......但根据Ken的评论,效率较低。
答案 3 :(得分:1)
将indexOf
用于较新的浏览器,并为您可以找到here的旧浏览器提供实施。
// return value of -1 indicates hash wasn't found
["", "#all", "#"].indexOf(window.location.hash)
答案 4 :(得分:1)
只是一个补充,因为除了各种各样的不重复自己的方法,没有人提到:
在浏览器中,
window
为Global
对象,所以切掉它,如果你不这样做 有另一个名为的财产 当前范围内的"location"
(不太可能)。location.hash
就足够了
答案 5 :(得分:1)
我认为检查长度是好的,因为第一个字符总是哈希。
var h = location.hash;
if ( h.length > 1 && h != '#top' )