2012-07-19 29 views
2

我深化發展的Web App有大串交易,所以我想知道要獲取的方式單個字符比較快,這一個:charAt(i)方法比僅使用[i]更快嗎?

var myStr = 'foo'; 
return myStr[i]; 

或者這一個:

var myStr = 'foo'; 
return myStr.charAt(i); 
+1

順便說一句,[這裏是一個jsperf](http://jsperf.com/charat-vs-arraycall/2),如果你想知道性能的差異。我認爲這取決於瀏覽器。 – 2012-07-19 05:37:56

回答

4

訪問字符s通過索引通過括號表示法(myStr[i])不僅在IE中不起作用,而且在ES3標準中沒有指定(一個所有瀏覽器正確實現)。

然而,(其由現代瀏覽器支持)的ES5規範(當前標準)does include索引的字符:

命名的數組索引屬性對應於字符串值的各個 字符。

因此,寫向後兼容跨瀏覽器代碼,你應該通過charAt訪問單個字符。

+1

這將是一個有效的標準,在未來。 當然,這意味着,直到2020年,爲了向後兼容非選擇JS,您將使用.charAt,無論如何。 – Norguard 2012-07-19 05:33:44

+0

@Norguard,那很酷!你能鏈接到提案/草案嗎? – katspaugh 2012-07-19 05:34:52

+1

我很樂意在ECMAScript5,Harmony和Next中尋找官方宣言,但我真的沒有時間 - 我相信這是ES5嚴格模式中的一個標準。下面是一個聖盃的刪節版本的摘錄:http://my.safaribooksonline.com/book/-/9781449335977/6dot-arrays/id3191775否則,你可以聽到一些大名字(如Crockford和Moz人們)在談判中談論它 - 當然,那些談判將在2009 - 2010年舉行,可能談論的是未來,這仍然不在這裏。 – Norguard 2012-07-19 07:05:09

3

我不知道這是更快,但你可能想看看string.charAt(x) or string[x]? 看到爲什麼myStr.charAt(i)大於使用myStr的更好的討論[I](答案是瀏覽器的兼容性)

+0

嗯,這個鏈接是實用的,但正如我在我的編輯中顯示的,我正在訪問包含字符串的var,而不是直接 – 2012-07-19 05:26:52

+1

另外,re:速度,這不顯示IE,但它顯示相對性能速度;運行測試,看起來支架符號更快:http://jsperf.com/string-charat-vs-bracket-notation – megsa 2012-07-19 05:32:13

相關問題