2011-05-09 53 views

回答

194
// Bracket Notation 
"Test String1"[6] 

// Real Implementation 
"Test String1".charAt(6) 

這是一個壞主意,用括號內,這些原因(Source):

這種表示法並不在IE7工作。 第一個代碼片段將返回在IE7中未定義的 。如果你碰巧使用 字符串所有 在你的代碼中的括號標記,並要遷移 到.charAt(pos),這是一個真正的痛苦: 支架都是用在你的代碼 ,有沒有簡單的方法,如果 這是檢測對於一個字符串或一個 數組/對象。

您不能使用此表示法設置字符。由於 沒有任何警告,這是令人困惑和 令人沮喪。如果您正在使用 .charAt(pos)函數,您不會嘗試去做 。

基本上,這是一種在所有瀏覽器中都沒有完全實現的捷徑。

請注意,您無法使用任一種方法編寫字符。但是,該功能在使用.charAt()函數時更易於理解,在大多數語言中該函數是隻讀函數。

+6

的確,這個記法在IE7中不起作用,但是這不是現在的巨大缺點。與此同時,我所做的基準測試顯示,在字符串裝入對象時,在Chrome中使用charAt與indexer時性能下降了三倍。我知道這不是真的相關,但仍值得注意.https://jsfiddle.net/mdasxxd2/ – 2016-07-25 10:51:54

+4

更準確的測試(benchmark.js)https://esbench.com/bench/579609a0db965b9a00965b9e – NoNameProvided 2016-07-25 12:46:08

69

MDN

有一個字符串中訪問一個個性的兩種方式。第一個是charAt方法:

return 'cat'.charAt(1); // returns "a" 

另一種方法是治療所述字符串作爲數組,其中每個索引對應於一個單獨的字符:

return 'cat'[1]; // returns "a" 

的第二種方法(處理字符串作爲數組)不是ECMAScript 3的一部分;這是一個JavaScript和ECMAScript 5功能(並且在所有瀏覽器中都不支持)。

在這兩種情況下,嘗試設置單個字符都不起作用。試圖通過charA設置一個字符會導致錯誤,當試圖通過索引來設置字符時不會拋出錯誤,但字符串本身並未改變。

因此,正如您現在可能已經發現的那樣,從兼容性角度來看,charAt()更好。

+10

確實,ECMA 5不是但支持所有瀏覽器,但它在MOST瀏覽器上受支持:意味着IE9及更高版本和所有Chrome/Firefox版本: http://kangax.github.io/compat-table/es5/#Property_access_on_strings 沒有JS功能將永遠得到100%的支持,我覺得避免使用ECMA 5功能將使我們永遠在過去...... – 2015-02-11 13:20:53

10

String.charAt()是標準的,它適用於所有瀏覽器。 在非IE瀏覽器中,您可以使用括號表示來訪問字符,但IE不支持。 (不知道他們是否已經實施了最新版本)。

如果有人真的想使用支架通知。將字符串轉換爲char數組是明智的選擇,以便與任何瀏覽器兼容。

var testString = "Hello"; 
var charArr = myString.split(''); 
+5

IE支持從8開始的括號表示法。 – mrec 2014-01-02 15:33:18

+3

處理Unicode時,此方法會中斷:http://mathiasbynens.be/notes/javascript-unicode – 2014-04-07 17:41:30

+0

該方法在處理真正大的字符串時效率不高,因爲它會複製內存中的數據(原始字符串和數組) 。 – Daniel 2015-11-12 04:14:43

54

他們可以給在邊緣情況不同的結果。

'hello'[NaN] // undefined 
'hello'.charAt(NaN) // 'h' 

'hello'[true] //undefined 
'hello'.charAt(true) // 'e' 

的功能的charAt取決於索引如何轉換爲一個數字在spec

+0

''hello'[undefined] // undefined'和''hello'.charAt(undefined)// h' – 2016-02-25 20:58:29

+2

'null'就像'undefined'一樣工作,但是看到這個:''hello「[」00「] //「undefined」,但是「hello」.charAt(「00」)//「h」'和「」hello「[」0「] //」h「' – panzi 2016-02-27 19:42:43

+3

這一直說服我繼續使用'[' 。 – ApproachingDarknessFish 2017-06-06 15:44:30