字符串比较比字符串长度更快吗?

4

我不确定在多次使用时哪种方法更快,需要测试许多字符串变量。
在检查字符串是否只包含空格时,哪种方法更快?

if (str.trim().length > 0) {

}

或者

if (str.trim() !== '') {

}

3
如果你想反驳这个观点,请先构建一个 jfperf 测试用例。即使这样的微基准测试显示出“很大的差异”,请意识到它们在更大的上下文中通常是完全无关紧要的,所以这不会有什么影响。请注意,我的翻译并没有改变原意,只是让句子更通俗易懂。 - user166390
谢谢!我以前从未听说过这个网站。 - jackcogdill
JavaScript的问题被标记为.NET的重复问题? :/ - nawfal
5个回答

7

好的,为什么不测试一下呢?http://jsperf.com/empty-string-comparison2

就每秒计算次数而言,在Chromium上它们的差异不到1%。除非您每秒要测试数百万个字符串,否则不必担心。


链接已失效。 - softmarshmallow

2
简短回答是“进行基准测试并找出答案!”。如果您这样做,还可以尝试使用正则表达式来查看其速度:
if (str.match(/^\s*$/))

简短回答或评论...差不多。 - user166390
3
既然我们在进行前期优化,那么这里应该是/^\s*$/.test(str),对吧?毕竟返回布尔值比返回结果数组更快!;) - kojiro

2
根据Alex D的建议,使用这个快速测试正则表达式会更快。
string = "   l   l l sfsf  __ ";
d = new Date().getTime();
for(var i = 0; i < 900000; i++){
    if (string.trim().length > 0) continue;
}
d1 = new Date().getTime() - d;
alert(d1);
d = new Date().getTime();
for(var i = 0; i < 900000; i++){
    if (string.trim() !== '') continue;
}
d1 = new Date().getTime() - d;
alert(d1);
d = new Date().getTime();
for(var i = 0; i < 900000; i++){
    if (string.match(/^\s*$/)) continue;
}
d1 = new Date().getTime() - d;
alert(d1);

1

我认为字符串长度比较与两个字符串的比较相比更快。


1

JSFiddle: http://jsfiddle.net/pja77gzp/

JSFiddle是一个在线代码编辑器和调试工具,可以用于编写HTML、CSS和JavaScript代码,并在浏览器中实时预览。以上链接是一个示例JSFiddle页面的链接。
<script>
    var s1 = '  ';
    var s2 = '  ';
    var benchmarkCount = 10000000;
    function testStringComparison() {
        var t = new Date();
        var i = 0;
        for (var i = 0; i < benchmarkCount; i++) {
            if (s1.trim().length == s2.trim().length) {
                i++;
            }
        }
        t = (new Date()) - t;
        document.writeln("testStringComparison completed");
        document.writeln(t);
    }

    function testStringLenght() {
        var t = new Date();
        var i = 0;
        for (var i = 0; i < benchmarkCount; i++) {
            if (s1.trim() == s1.trim()) {
                i++;
            }
        }
        t = (new Date()) - t;
        document.writeln("testStringLenght completed");
        document.writeln(t);
    }


    function startBenchmark() {
        testStringComparison(); 
        testStringLenght();
    }

    setTimeout(startBenchmark, 1000);

</script>

谢谢您进行设置,但是您没有发布任何测试结果。我已经对此进行了一些测试,并得到了一些非常有趣的结果。大多数情况下,长度比较实际上会慢一点,即使字符串非常长并且几乎完全相同。事实上,奇怪的是,似乎使字符串更长实际上使长度比较变得更慢。然后我尝试比较字符串“222222”和“2”,这次完整的字符串比较所花费的时间几乎是长度比较的两倍! - Moss
@Moss 绝对正确。我已经更新了 jsfiddle 基准测试的链接。我认为,如果性能在应用程序中起着重要作用,那么长度比较应该被每个人使用。特别是对于大量计算。 - Manish Rawat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接