String and String Object
JavaScript 中,基本的資料型態有數值、字串、布林三種,而這些資料的指派都有兩種方法,一種是直接指派值,另一種是用建構函式,以字串為例:
var sv = "1234567890";
var so = new String("1234567890");
以前我一直以為兩種是等價的,不過在看 Efficient JavaScript 這篇文章時才發現兩者不是完全相等,在使用字串的 method 如 .charAt() 時,第一種字串值要先轉換成第二字串物件,然後才執行 .charAt() ,當需要大量執行字串的 method 時,用第二個方法來宣告字串變數理論上會比較快,不過我實際測試之後才注意到文章該段最後有說到這是 Opera 才有特別做最佳化的,測試用的code如下:
var s = "1234567890";
//var s = new String("1234567890");
var start = (new Date()).getTime();
for( var j = 0; j < 10000; j++ ) {
for( var i = 0; i < s.length; i++ ) {
s.charAt(i);
}
}
var end = (new Date()).getTime();
alert(end-start);
結果如下:
Opera | Firefox | IE | |
---|---|---|---|
"blah" | 234 | 313 | 344 |
new String() | 156 | 381 | 266 |
unit: micro seconds |
可以發現 Opera 用 new String() 時有比較快, IE 雖然也有,不過我在某些電腦上測試結果是和 Firefox 差不多,沒列出來的 safari 其實表現也和 Firefox 差不多,至於 Google Chrome 在編譯的時候有最佳化過,結果都是超快,無法作為參考。所以結論是,還是繼續用普通的方法就好了XD。