我正在写一个Safari扩展,想要检测我当前所在的页面(url),并做相应的事情。
现在我的代码看起来像这样:
if (linkHas("facebook.com")) {...}
else if (linkHas("google.com")) {...}
else if (linkHas("yahoo.com")) {...}
其中linkHas()
是一个函数,如果它有参数,它基本上返回1,否则返回0。
可以编写这一条switch语句吗?我在某处读到,如果有5个以上的选项,switch语句就会以哈希表的形式实现。对于像我这样的小脚本,速度在这里可能并不是很重要,我只是把它作为一种练习来尝试。
发布于 2015-11-23 23:38:39
编辑:免责声明:以下是您不应该做的事情,但仅供参考。不要让别人告诉你你不能,但当他们说你不应该的时候,要倾听。
非常幼稚的方式:
switch(true){
case linkHas("facebook.com"):
// ...
break;
case linkHas("google.com"):
// ...
break;
case linkHas("yahoo.com"):
// ...
break;
}
但是这绝对没有性能上的好处。事实上,如果在执行相等性测试之前评估所有函数,则速度可能会更慢。
还有很长的路要走,那就是将linkHas
重构为getLinkDomain
,并检查它返回的任何内容。
事实上,让我们这样做吧。使用由lewdev编写的方便的函数extractDomain,您可以:
var domain = extractDomain(link);
switch(domain){
case "facebook.com":
// ...
break;
//...
}
发布于 2015-11-23 23:57:55
动作创建一个域的“枚举”,以避免魔法strings.
然后写下:
actions[getDomain()]();
https://stackoverflow.com/questions/33882789
复制相似问题