4

我不确定哪种方法可以多次使用更快,使用大量字符串变量进行测试。
其中哪一个更快用于检查字符串是否只是空格?

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

}

或者

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

}
4

5 回答 5

7

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

就每秒计算量而言,它们相差不到 1%(至少在 Chromium 上)。除非您每秒测试数百万个字符串,否则我不会担心。

于 2013-02-27T04:25:41.753 回答
2

简短的回答是“基准测试并找出答案!”。如果你这样做,你也可以尝试使用正则表达式,看看它有多快:

if (str.match(/^\s*$/))
于 2013-02-27T04:23:00.980 回答
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);
于 2013-02-27T04:30:08.207 回答
1

我相信字符串长度比较比两个字符串的比较更快。

于 2013-02-27T04:16:58.480 回答
1

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

<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>
于 2013-02-27T04:50:23.603 回答