2013-02-27 193 views
4

我不確定哪種方法更快地使用多次,用很多字符串變量進行測試。
哪些更快用於檢查字符串是否只是空格?字符串比較比字符串長度更快嗎?

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

} 

或者

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

} 
+3

它不會有所作爲。在爭論之前,請構建一個[jfperf](http://jsperf.com)測試用例。然後認識到任何這樣的微觀基準 - 即使它們表現出「巨大差異」 - 通常在更大範圍內完全不相關。 – 2013-02-27 04:21:36

+0

謝謝!我從來沒有聽說過這個網站。 – jackcogdill 2013-02-27 04:24:06

+0

Javascript問題標記爲.NET的一個重複? :/ – nawfal 2014-01-15 17:08:52

回答

1

我相信字符串Lenght比較快的比較兩個字符串的比較。

+2

你爲什麼這麼認爲? – 2013-02-27 04:17:31

+0

看到我下面的答案 – 2013-02-27 04:55:43

2

簡短的答案是「基準和找出!」。如果你這樣做,你也可以嘗試使用正則表達式,看看如何快速那就是:

if (str.match(/^\s*$/)) 
+0

簡短的回答或評論..大致相同。 – 2013-02-27 04:23:34

+2

由於我們預優化,不應該這是'/^\ s * $ /。test(str)'?當然,返回布爾值比結果數組快! ;) – kojiro 2013-02-27 04:30:00

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

的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> 
+0

使用編輯發佈新問題的答案 – 2013-02-27 05:24:46

+0

是的。謝謝你的建議。 – 2014-01-17 05:06:41

+0

感謝您的設置,但您沒有發佈任何測試結果。我做了一些測試,並得到了一些非常有趣的結果。大多數時候,長度比較實際上比較慢一點。即使琴絃很長,幾乎相同。實際上,奇怪的是,讓字符串變長會讓字符長度比較慢。然後我試着比較字符串'222222'和'2',這次完整的字符串比較花費的時間幾乎是長度比較的兩倍! – Moss 2014-08-15 21:36:27