例如:
for (var idx = 0, len = lines.length; idx < len; idx += 1) {
/^regexp?/i.test(lines[idx]);
}
下面的操作会更有效率吗?
var pattern = /^regexp?/i;
for (var idx = 0, len = lines.length; idx < len; idx += 1) {
pattern.test(lines[idx]);
}
我的理解是,在第一种情况下,将为每次迭代创建一个新的RegExp对象,消耗比必要的更多的内存。我的理解是正确的,还是JavaScript引擎执行优化,使上面的例子等效?
缓存的正则表达式会更快。lines
中的元素越多,重新创建相同的regex对象所浪费的时间就越多。
您的假设是正确的,创建多个对象的性能肯定会低于只创建一个对象。将regex创建移出循环是一个很好的实践。即使某些引擎做了一些优化,你也希望你的代码在每个可能的引擎中都能有效地运行。