Gibt es einen Grund, den ich string.charAt(x)
anstelle der Klammernotation verwenden sollte string[x]
?
javascript
string
Mixer
quelle
quelle
"😃".charAt(0)
wird ein unbrauchbares Zeichen zurückgegebenAntworten:
Die Klammernotation funktioniert jetzt in allen gängigen Browsern mit Ausnahme von IE7 und darunter.
Aus folgenden Gründen war es eine schlechte Idee, Klammern zu verwenden ( Quelle ):
quelle
Von MDN :
str.charAt(i)
ist aus Kompatibilitätssicht besser, wenn IE6 / IE7-Kompatibilität erforderlich ist.str[i]
ist moderner und funktioniert in IE8 + und allen anderen Browsern (alle Edge / Firefox / Chrome, Safari 2+, alle iOS / Android).quelle
Sie können in Randfällen unterschiedliche Ergebnisse liefern.
Die Funktion charAt hängt davon ab, wie der Index in der Spezifikation in eine Zahl konvertiert wird .
quelle
'hello'[undefined] // undefined
und'hello'.charAt(undefined) //h
null
funktioniert wieundefined
, aber sehen Sie dies:"hello"["00"] // undefined
aber"hello".charAt("00") // "h"
und"hello"["0"] // "h"
[]
..charAt()
eine zusätzliche Konvertierung für seinen Parameter in a durchgeführt wirdNumber
. Zu Ihrer Information, es gibt heutzutage fast keinen Leistungsunterschied mehr.String.charAt () ist der ursprüngliche Standard und funktioniert in allen Browsern. In IE 8+ und anderen Browsern können Sie die Klammer-Notation verwenden, um auf Zeichen zuzugreifen, aber IE 7 und niedriger haben dies nicht unterstützt.
Wenn jemand wirklich die Klammer-Notation in IE 7 verwenden möchte, ist es ratsam, die Zeichenfolge mithilfe von in ein Array zu konvertieren
str.split('')
und sie dann als Array zu verwenden, das mit jedem Browser kompatibel ist.quelle
Sehr interessantes Ergebnis, wenn Sie den String-Index-Accessor mit der
charAt()
Methode testen . Chrome scheint der einzige Browser zu sein, dercharAt
mehr mag .CharAt vs Index 1
ChartAt vs Index 2
ChartAt vs Index 3
quelle
index
ist auch in Chrom viel schneller.Es gibt einen Unterschied, wenn Sie versuchen, auf einen Index zuzugreifen, der außerhalb der Grenzen liegt oder keine Ganzzahl ist.
string[x]
Gibt das Zeichen an derx
th-Position instring
if zurück, wennx
es eine Ganzzahl zwischen 0 und iststring.length-1
, und gibtundefined
andernfalls zurück.string.charAt(x)
umwandeltx
in eine Ganzzahl unter Verwendung des Verfahrens erläutert hier (die rundet grundsätzlichx
ab , wennx
eine nicht ganzzahlige Zahl und liefert 0 , wenn ist ,parseInt(x)
istNaN
) , und dann das Zeichen an der diese Position zurückgibt , wenn die ganze Zahl zwischen 0 und iststring.length-1
ansonsten, und gibt eine leere Zeichenfolge .Hier sind einige Beispiele:
Ein weiterer Unterschied besteht darin, dass das Zuweisen zu
string[x]
nichts bewirkt (was verwirrend sein kann) und das Zuweisen zustring.charAt(x)
(wie erwartet) ein Fehler ist:Der Grund, warum die Zuweisung zu
string[x]
nicht funktioniert, liegt darin, dass Javascript-Zeichenfolgen unveränderlich sind .quelle