Y a-t-il une raison pour laquelle je devrais utiliser string.charAt(x)
la notation entre crochets string[x]
?
javascript
string
Mixeur
la source
la source
"😃".charAt(0)
renverra un caractère inutilisableRéponses:
La notation entre parenthèses fonctionne désormais sur tous les principaux navigateurs, à l'exception d'IE7 et des versions antérieures.
Auparavant, c'était une mauvaise idée d'utiliser des crochets, pour ces raisons ( Source ):
la source
De MDN :
str.charAt(i)
est préférable du point de vue de la compatibilité si la compatibilité IE6 / IE7 est requise.str[i]
est plus moderne et fonctionne dans IE8 + et tous les autres navigateurs (tous Edge / Firefox / Chrome, Safari 2+, tous iOS / Android).la source
Ils peuvent donner des résultats différents dans les cas marginaux.
La fonction charAt dépend de la façon dont l'index est converti en un nombre dans la spécification .
la source
'hello'[undefined] // undefined
et'hello'.charAt(undefined) //h
null
fonctionne commeundefined
, mais voyez ceci:"hello"["00"] // undefined
mais"hello".charAt("00") // "h"
et"hello"["0"] // "h"
[]
..charAt()
effectue une conversion supplémentaire pour son paramètre en aNumber
. Pour info, il n'y a presque plus de différence de performance de nos jours.String.charAt () est la norme d'origine et fonctionne dans tous les navigateurs. Dans IE 8+ et d'autres navigateurs, vous pouvez utiliser la notation entre parenthèses pour accéder aux caractères, mais IE 7 et les versions antérieures ne le prenaient pas en charge.
Si quelqu'un veut vraiment utiliser la notation entre crochets dans IE 7, il est sage de convertir la chaîne en un tableau en utilisant
str.split('')
puis de l'utiliser comme un tableau, compatible avec n'importe quel navigateur.la source
Résultat très intéressant lorsque vous testez l'accesseur d'index de chaîne par rapport à la
charAt()
méthode. Semble Chrome est le seul navigateur qui aimecharAt
plus.CharAt vs index 1
Graphique vs indice 2
Graphique vs indice 3
la source
index
est beaucoup plus rapide en chrome aussi.Il y a une différence lorsque vous essayez d'accéder à un index qui est hors limites ou non un entier.
string[x]
renvoie le caractère à lax
e position dansstring
ifx
est un entier compris entre 0 etstring.length-1
, et renvoieundefined
sinon.string.charAt(x)
convertitx
en un entier en utilisant le processus expliqué ici (qui arrondit essentiellementx
six
est un nombre non entier et renvoie 0 siparseInt(x)
estNaN
), puis retourne le caractère à cette position si l'entier est compris entre 0 etstring.length-1
, et renvoie une chaîne vide sinon .Voici quelques exemples:
Une autre différence est que l'attribution à
string[x]
ne fait rien (ce qui peut être déroutant) et l'attribution àstring.charAt(x)
est une erreur (comme prévu):La raison pour laquelle l'attribution à
string[x]
ne fonctionne pas est que les chaînes Javascript sont immuables .la source