Javascript 有没有更快的方法来编写条件语句?
我有这样一句话:Javascript 有没有更快的方法来编写条件语句?,javascript,syntactic-sugar,Javascript,Syntactic Sugar,我有这样一句话: if(window.location.hash != '' && window.location.hash != '#all' && window.location.hash != '#') 我可以这样写吗?我只需要提到一次window.location.hash?您可以使用in运算符和对象文本: if (!(window.location.hash in {'':0, '#all':0, '#':0})) 这是通过测试对象的键来实现的(0
if(window.location.hash != '' && window.location.hash != '#all' && window.location.hash != '#')
我可以这样写吗?我只需要提到一次
window.location.hash
?您可以使用in运算符和对象文本:
if (!(window.location.hash in {'':0, '#all':0, '#':0}))
这是通过测试对象的键来实现的(0只是填充键)
另外请注意,如果您正在处理
对象的原型,这可能会中断。您可以使用in运算符和对象文本:
if (!(window.location.hash in {'':0, '#all':0, '#':0}))
这是通过测试对象的键来实现的(0只是填充键)
另外请注意,如果您正在处理对象的原型,这可能会中断。显而易见的方法是:
var h = window.location.hash;
if (h != '' && h != '#all' && h != '#')
显而易见的方法是:
var h = window.location.hash;
if (h != '' && h != '#all' && h != '#')
正则表达式?可读性不强,但足够简洁:
if (/^(|#|#all)$/.test(window.location.hash)) {
// ...
}
这也适用于:
if (window.location.hash.match(/^(|#|#all)$/)) {
// ...
}
。。。但根据肯的评论,它的效率较低。正则表达式?可读性不强,但足够简洁:
if (/^(|#|#all)$/.test(window.location.hash)) {
// ...
}
这也适用于:
if (window.location.hash.match(/^(|#|#all)$/)) {
// ...
}
。。。但根据Ken的评论,它的效率较低。对于较新的浏览器使用indexOf
,并为您可以找到的较旧的浏览器提供一个实现
对较新的浏览器使用indexOf
,并为您可以找到的较旧的浏览器提供一个实现
只是一个补充,因为除了比较好的各种不重复自己的方法外,没有人提到:
在浏览器中,window
是Global
物体,所以如果你没有,就把它剪掉
拥有另一个名为
当前范围中的“位置”
(不太可能)<代码>位置。散列就足够了
只是一个补充,因为除了比较好的各种不重复自己的方法外,没有人提到:
在浏览器中,window
是Global
物体,所以如果你没有,就把它剪掉
拥有另一个名为
当前范围中的“位置”
(不太可能)<代码>位置。散列就足够了
我认为最好检查长度,因为第一个字符总是一个散列
var h = location.hash;
if ( h.length > 1 && h != '#top' )
我认为最好检查长度,因为第一个字符总是一个散列
var h = location.hash;
if ( h.length > 1 && h != '#top' )
使用数组的解决方案会更整洁(不需要填充0),但是IE没有索引
,所以我想这会更好,因为你真的需要代码>?难道0
s不能实现这一点吗?快速建议在简单的“或”情况下使用1
,因此我猜0
会否定它吗?@Isaac 0并不重要,in
只是检查键。因此它们也可能是1
s,在这两种情况下?使用数组的解决方案会更整洁(不需要填充0),但是IE没有索引,所以我想这会更好,因为你真的需要代码>?难道0
s不能实现这一点吗?快速建议在简单的“或”情况下使用1
,因此我猜0
会否定它吗?@Isaac 0并不重要,in
只是检查键。因此它们也可能是1
s,无论哪种情况?为了完全准确,第二个示例应该使用search
而不是match
,并且两者都应该测试值==-1。String的search
方法与RegExp的test
方法相当,而其match
方法与RegExp的exec
方法相当match
和exec
速度较慢,但提供更多信息(或null
不匹配),而search
和test
只需在第一个匹配开始的字符串中给出索引(或-1表示不匹配)。RegExp.test
返回布尔值,而不是索引。不过,我同意你其余的评论。我的第二个示例效率稍低,但比您提出的备选方案更具可读性——我想简洁是问题的关键。为了完全准确,第二个示例应该使用搜索,而不是匹配,两者都应该测试值==-1。String的search
方法与RegExp的test
方法相当,而其match
方法与RegExp的exec
方法相当match
和exec
速度较慢,但提供更多信息(或null
不匹配),而search
和test
只需在第一个匹配开始的字符串中给出索引(或-1表示不匹配)。RegExp.test
返回布尔值,而不是索引。不过,我同意你其余的评论。我的第二个例子效率稍低,但比你提出的备选方案更具可读性——我想简洁是问题的关键。我倾向于以这种方式使用局部变量。这也使得调试更容易。我倾向于用这种方式使用局部变量。它也使调试更容易。