4

多くの文字列変数でテストして、これらの方法のどれが複数回使用するのが速いかはわかりません。
文字列が単なる空白かどうかを確認するために使用するのに、これらのうちどれがより高速ですか?

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

}

または

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

}
4

5 に答える 5

7

さて、それをテストしてみませんか?http://jsperf.com/empty-string-comparison2

1 秒あたりの計算に関しては、1% 未満の差です (少なくとも Chromium では)。毎秒何百万もの文字列をテストしていない限り、私は心配しません。

于 2013-02-27T04:25:41.753 に答える
2

簡単に言えば、「ベンチマークして調べてください!」です。これを行う場合は、正規表現を使用してみて、それがどれほど速いかを確認することもできます。

if (str.match(/^\s*$/))
于 2013-02-27T04:23:00.980 に答える
2

アレックス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

文字列の長さの比較は、2つの文字列の比較よりも速いと思います。

于 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 に答える