Javascript 在大型循环中使用的性能更高的是什么:.indexOf(str)或.match(regex)?

Javascript 在大型循环中使用的性能更高的是什么:.indexOf(str)或.match(regex)?,javascript,regex,arrays,match,indexof,Javascript,Regex,Arrays,Match,Indexof,我的页面上有一个array.prototype,它似乎占用了很多处理时间: Array.prototype.findInArray = function(searchStr) { var returnArray = false; for (i=0; i<this.length; i++) { if (typeof(searchStr) == 'function') { if (sea

我的页面上有一个array.prototype,它似乎占用了很多处理时间:

        Array.prototype.findInArray = function(searchStr) {
          var returnArray = false;
          for (i=0; i<this.length; i++) {
            if (typeof(searchStr) == 'function') {
              if (searchStr.test(this[i])) {
                if (!returnArray) { returnArray = [] }
                returnArray.push(i);
              }
            } else {
              var regexp = new RegExp(".*" + searchStr + ".*");
              if (this[i].match(regexp)) {
                if (!returnArray) { returnArray = [] }
                returnArray.push(i);
              }
            }
          }
          return returnArray;
        }
Array.prototype.findInArray=函数(searchStr){
var returnArray=false;

对于(i=0;i,正则表达式可能变化很大。我认为一个简单、精心编制的正则表达式可能与indexOf()一样快或更快。另一方面,复杂正则表达式需要更多的时间,因为它需要做更多的工作


你也有一个浏览器实现的问题,即云计算问题。如果不写一个定时循环来测量每个浏览器根据你的特定需求进行每种类型的检测所花费的时间,你就不可能真正得到一个可靠的答案。

首先,你知道你不必有“*”在任何一方,对吗?默认情况下,已存在的正则表达式将匹配字符串中的任何位置。其次,如果您只是搜索常量字符串,而不需要使用正则表达式提供的任何高级功能,那么使用
.indexOf()肯定会更快
。此外,这样您就不必担心转义具有特殊意义的字符。

更糟糕的是,在循环的每次迭代中都创建一个新的正则表达式对象- 在循环外定义一次,或将其作为参数传递


另外,在这种情况下,testmatch

更好更快,为什么不同时计时呢?我怀疑indexOf在大多数情况下都会更快,但测试比怀疑更好。别忘了每个环境都可能不同。在Firefox中计时,你可能会得到与Opera不同的结果,Chrome,或Safari。我会在Internet Explorer中计时,因为它是最短的——在IE中速度很快,其他地方应该都很快。+1我无法想象正则表达式怎么能打败indexOf。如果你不需要正则表达式,就不要使用正则表达式。