chaîne.charAt (x) ou string[x]?

y a-t-il une raison pour que j'utilise string.charAt(x) au lieu de la notation string[x] ?

208
demandé sur Blender 2011-05-10 03:55:45

5 réponses

// Bracket Notation
"Test String1"[6]

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

c'est une mauvaise idée d'utiliser des parenthèses, pour ces raisons ( Source ):

cette notation ne fonctionne pas dans IE7. Le premier extrait de code retournera Non défini dans IE7. Si vous arrive d'utiliser la notation des crochets pour toutes les cordes sur votre code et vous voulez migrer .charAt(pos) , c'est une vraie douleur: Les parenthèses sont utilisées partout dans votre code et il n'y a pas de moyen facile de détecter si c'est une chaîne ou un tableau/objet.

vous ne pouvez pas définir le caractère en utilisant cette notation. Comme il n'y a pas d'avertissement de n'importe quelle sorte, c'est vraiment confus et frustrant. Si vous étiez à l'aide de la .charAt(pos) fonction, vous ne voulez pas ont été tentés de le faire.

fondamentalement, c'est une notation de raccourci qui n'est pas entièrement mis en œuvre dans tous les navigateurs.

notez que vous n'êtes pas capable d'écrire des caractères en utilisant l'une ou l'autre des méthodes. Cependant, cette fonctionnalité est un peu plus facile à comprendre avec la fonction .charAt() qui, dans la plupart des langues, est une fonction en lecture seule.

211
répondu Brian Webster 2015-05-16 03:14:26

de MDN :

il y a deux façons d'accéder à un caractère individuel dans une chaîne de caractères. La première est la méthode charAt , qui fait partie D'ECMAScript 3:

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

L'autre façon est de traiter la chaîne comme un tableau, comme objet, où chaque caractère correspond à un indice numérique. Cela a été pris en charge par la plupart des navigateurs depuis leur première version, sauf for IE. Elle a été standardisée dans ECMAScript 5:

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

la seconde voie nécessite la prise en charge D'ECMAScript 5 (et n'est pas prise en charge par certains navigateurs plus anciens).

dans les deux cas, tenter de changer un caractère individuel ne marchera pas, car les chaînes sont immuables, c'est-à-dire que leurs propriétés ne sont ni" inscriptibles "ni"configurables".

  • str.charAt(i) est mieux à partir d'un perspective de compatibilité si la compatibilité IE6/IE7 est requise.
  • str[i] est plus moderne et fonctionne avec IE8+ et tous les autres navigateurs (tous Edge/Firefox/Chrome, Safari 2+, Tous iOS/Android).
75
répondu Matt Ball 2018-09-01 22:27:58

ils peuvent donner des résultats différents dans les cas de bord.

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

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

la fonction charAt dépend de la façon dont l'indice est converti en un nombre dans le spec .

57
répondu MarkG 2015-06-09 20:39:01

de la Chaîne.charAt() est la norme d'origine et fonctionne dans tous les navigateurs. Dans IE 8+ et les autres navigateurs, vous pouvez utiliser la notation entre parenthèses pour accéder aux caractères, mais IE 7 et ci-dessous ne l'ont pas supporté.

si quelqu'un veut vraiment utiliser la notation des crochets dans IE 7, Il est sage de convertir la chaîne en un tableau en utilisant str.split('') et puis l'utiliser comme un tableau, compatible avec n'importe quel navigateur.

var testString = "Hello"; 
var charArr = testString.split("");
charArr[1]; // "e"
11
répondu CharithJ 2018-08-02 22:27:54

résultat très intéressant lorsque vous testez l'accesseur d'index de chaîne par rapport à la méthode charAt() . Il semble que Chrome est le seul navigateur qui aime charAt plus.

CharAt vs index 1

ChartAt vs index 2

ChartAt vs index 3

9
répondu Arman McHitarian 2013-07-16 12:48:50