在JavaScript中,您可以在regex字符串替换操作中定义回调处理程序:
str.replace(/str[123]|etc/, replaceCallback);
想象一下,你有一个字符串和替换的查找对象。
var lookup = {"str1": "repl1", "str2": "repl2", "str3": "repl3", "etc": "etc" };
和这个回调函数:
var replaceCallback = function(match) {
if (lookup[match])
return lookup[match];
else
return match;
}
您如何评估上述回调的表现?有没有可靠的方法来改善它?会
if (match in lookup) //....
甚至
return lookup[match] || match;
为JS编译器带来了优化的机会,还是一切都是一样的?
答案 0 :(得分:6)
+1给Annie关于性能基准测试。
但我会选择
return lookup[match] || match;
它不仅仅是对属性的单一检索(而不是 - 禁止优化 - 两个,如前面的示例中所示),但它也更短(并且对于更短的代码并不总是如此)更清楚任何半职经验的JavaScript编码器。它会倾向于抛弃一些新手,但是你想要教新手的第一件事就是特殊的(和优秀的)||
和&&
如何在JavaScript中工作,所以......
在某些实现中,它也适用于几个(非常)边缘情况。 (示例:'toString' in {}
应为true
[所有对象都从toString
原型继承Object
,但在Microsoft的JScript中为false
。)
关于优化:除非明显明显(不要让你的循环条件成为必须计算事物的函数,如果它可以是不变的,避免不必要地重复查找),甚至没有关于它是否值得担心的一般讨论在您看到问题之前(有时称为“过早优化”),对于一般Web来说,JavaScript尤其如此。不同的微优化在不同的实现中有不同的结果,有时会产生冲突的结果(“A”在Internet Explorer中更好,但在FireFox中更糟糕,反之亦然)。大多数情况下,只要等到你看到一个特定的问题,然后解决这个特定的问题。
我更喜欢简单明了,除非我有充分的理由相信笨拙的东西会给我一个可衡量的,真实世界的改进。
答案 1 :(得分:5)
您可以使用JSLitmus等基准工具来衡量不同的方法。一定要测试不同的浏览器。