哪个更快? javascript中的toUpperCase()或toLowerCase()?
答案 0 :(得分:14)
以下是主流浏览器(几个月前)的test results。得出的结论是toLowerCase()
更快,但对为什么提供没有任何见解。
修改强>
出于好奇,我已经离开并浏览了WebKit JavaScript源代码。除了对.toUpperCase()
,.toLowerCase()
以及.toASCIIUpper()
和.toASCIILower()
的一些调用外,Unicode::toUpper()
和Unicode::toLower()
原型方法完全相同。进一步检查前两种方法,我发现.toLowerCase()
函数比.toUpperCase()
函数稍微复杂一点。
.toASCIILower()
执行一些简单的位移逻辑:
char toASCIILower(char c) {
return c | ((c >= 'A' && c <= 'Z') << 5);
}
.toASCIIUpper()
更多参与其中:
char toASCIIUpper(char c) {
return static_cast<char>(c & ~((c >= 'a' && c <= 'z') << 5));
}
.toASCIIUpper()
函数中的静态强制转换和额外按位求反(〜),重复超过一百万次迭代,可能会导致其性能较差。
现在,这都是推测性的;我没有做过真正的测试,也没有尝试完全理解这些方法,但也许其他人可以详细说明。
答案 1 :(得分:3)
根据进行的测试,website说
toLowerCase() is faster than toUpperCase()
答案 2 :(得分:2)
它们应该完全相同。 可能它们可以针对所有字符已经大写/小写的情况进行优化,但是它将取决于字符串已经存在的情况,例如'abc'.toLowerCase()
会比'ABC'.toLowerCase()
更快,因为它不必分配新的字符串。我不知道有任何实现这样做。
真的,找出答案的唯一方法是用各种不同的字符串测试这两个函数。
答案 3 :(得分:1)
以下是我的测试结果。
浏览器:Google Chrome
操作系统:Ubuntu
toLowerCase:19.68秒
toUpperCase:20.71秒
<html>
<body>
<script type="text/javascript">
var i=0;
for (i=0;i<=100000000;i++) {
"some string".toUpperCase();
//"SOME STRING".toLowerCase();
}
document.write("done!");
</script>
</body>
</html>