是否有更快的方法来编写条件语句?

时间:2010-11-16 05:23:24

标签: javascript syntactic-sugar

我有这样的陈述:

 if(window.location.hash != '' && window.location.hash != '#all' && window.location.hash != '#')

我可以写它,所以我只需要提一次window.location.hash吗?

6 个答案:

答案 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)

只是一个补充,因为除了各种各样的不重复自己的方法,没有人提到:

  

在浏览器中,windowGlobal   对象,所以切掉它,如果你不这样做   有另一个名为的财产   当前范围内的"location"   (不太可能)。 location.hash就足够了

答案 5 :(得分:1)

我认为检查长度是好的,因为第一个字符总是哈希。

var h = location.hash;
if ( h.length > 1 && h != '#top' )