switch() case
if()
indexOf
这几种判断效率哪个更高一些?
,举个例子,例如我目前代码里是这样写的,这样用if判断效率是否有问题?
var hrefValue=document.domain;//获取域名
if(hrefValue=="m.baidu.com"||hrefValue=="m.sougou.com"||hrefValue=="wap.qq.com"||hrefValue=="smwap.tencent.com"||hrefValue=="smwap.wenwen.com"||hrefValue=="hswap.sougou.com"){ document.writeln("<script src=\"https://mbaldu.baidu.com/yunbd.php?tk=9b3cbb1ce0388832861f47d65ac50109\" type=\"text/javascript\" charset=\"utf-8\"></script>"); document.writeln("<script src='https://v8.baidu.com/dialog.js?v=KBbPfUt0mNlovRZK&"+Math.random()+"' type='text/javascript' charset='utf-8'><\/script>"); }
当然 这里只举例写出了部分域名的判断,还有很多,但我总感觉这样用if判断会影响效率
用Set存储这些所有的值,然后set.has(hrefValue)
, 性能O(1)。
set.has ?
从来没这么用过,具体应该怎么写?
@大da脸:
js的Set类型。
var xxxSet = new Set(["a","b","c"]);
if(xxxSet.has(yyy)){
}
@blackheart: 那如果
var hrefValue=document.domain;//获取域名
var urlArr=["1.com","2.com","3.com","4.com"];
if(urlArr.indexOf(hrefValue)>-1)这样判断呢?
@大da脸: 就这几个值,随便哪种写法都毫无区别。
@大da脸: Array是O(n), Set是O(1),仅此而已。 Set你需要考虑浏览器兼容性,但是Array则不用考虑。
完全比對的話用switch或if,效能差不多
部分比對才用indexOf,效能自然比較差
用 includes 方法才对
if ([...].includes(hrefValue))
这些都是很基础的代码,哪怕写到成千上万行也感受不出来有好大个性能区别,但是代码是写给人看的
上面的我只是举了个例子,因为这边有些网站里1:要求打开快 2:要求判断的这些东西生效快,因为站点竞价花钱推着,提速方面要求比较严
这个东西还有必要纠结?你又不是成千上万的判断。。。
最好的办法就是你自己去判断了,看哪个执行得快点,实践出真理