什么更有效率?:
var text="ABCdef";
var lowerVersion=text.toLowerCase();
if (lowerVersion=='abcdef' || lowerVersion=='asdfgh' || lowerVersion=='zxcvbn'){...
或
var text="ABCdef";
if (text.toLowerCase()=='abcdef' || text.toLowerCase()=='asdfgh' || text.toLowerCase()=='zxcvbn'){...
即创建变量是否比多次运行 toLowerCase() 更昂贵?
谢谢。
最佳答案
这是 JavaScript。答案将是:视情况而定。这取决于您使用的引擎、您的数据、上下文中的其他内容、第一个匹配项还是最后一个匹配项匹配、备用星期二...
但是在 JavaScript 中创建变量非常快。相比之下,重复调用版本要求解释器进行多个函数调用,并且函数调用(尽管以任何实际衡量标准都很快)与大多数其他操作相比都很慢。如果解释器能够确定它可以缓存调用的结果,那么速度会如此快的唯一方法是棘手的。
Taking @Felix's performance test and making it pessimistic (例如,最坏的情况,它们都不匹配)表明即使 Chrome 也无法对其进行足够的优化以使重复的函数调用不会变得更糟。我没有做任何全面的测试,但 Chrome、Firefox 和 Opera 的速度都慢了大约 60%。
当然,您还有其他选择:
var text="ABCdef";
switch (text.toLowerCase()) {
case 'abcdef':
// ...
break;
case 'asdfgh'
// ...
break;
case 'zxcvbn'
// ...
break;
}
尽管如此,所有这些都是过早的优化,这通常已经够糟糕了,但对于 JavaScript 及其运行复杂的不同环境尤其糟糕。
更好的问题是:什么更清晰、更易于维护?
关于Javascript toLowerCase() 性能与变量创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6706064/