cadena.charAt (x) o string[x]?


¿Hay alguna razón por la que deba usar string.charAt(x) en lugar de la notación entre corchetes string[x]?

Author: Blender, 2011-05-10

5 answers

// Bracket Notation
"Test String1"[6]

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

Es una mala idea usar corchetes, por estas razones (Fuente):

Esta notación no funciona en IE7. El primer fragmento de código volverá indefinido en IE7. Si le sucede a usar la notación entre corchetes para las cadenas sobre su código y desea migrar para .charAt(pos), esto es un verdadero dolor: Los corchetes se utilizan en todo el código y no hay una manera fácil de detectar si eso es para una cuerda o un matriz/objeto.

No se puede establecer el carácter usando esta notación. Ya que no hay advertencia de de cualquier tipo, esto es muy confuso y frustrante. Si estuviera usando el .charAt(pos) función, usted no han sido tentados a hacerlo.

Básicamente, es una notación de acceso directo que no está completamente implementada en todos los navegadores.

Tenga en cuenta que no puede escribir caracteres utilizando ninguno de los métodos. Sin embargo, esa funcionalidad es un poco más fácil de entender con la función .charAt() que, en la mayoría de los idiomas, es una función de solo lectura.

 211
Author: Brian Webster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-16 03:14:26

De MDN:

Hay dos formas de acceder a un carácter individual en una cadena. El primero es el charAt método, parte de ECMAScript 3:

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

La otra forma es tratar la cadena como un objeto similar a una matriz, donde cada carácter individual corresponde a un índice numérico. Esto ha sido compatible con la mayoría de los navegadores desde su primera versión, a excepción de IE. Fue estandarizado en ECMAScript 5:

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

La segunda forma, requiere Soporte ECMAScript 5 (y no soportado en algunos navegadores antiguos).

En ambos casos, intentar cambiar un carácter individual no funcionará, ya que las cadenas son inmutables, es decir, sus propiedades no son ni "escribibles" ni "configurables".

  • str.charAt(i) es mejor desde una perspectiva de compatibilidad si se requiere compatibilidad IE6/IE7.
  • str[i] es más moderno y funciona en IE8+ y todos los demás navegadores (todos Edge / Firefox / Chrome, Safari 2+, todos iOS/Android).
 75
Author: Matt Ball,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-01 22:27:58

Pueden dar diferentes resultados en casos extremos.

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

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

La función charAt depende de cómo el índice se convierte en un Número en la especificación .

 57
Author: MarkG,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-09 20:39:01

Cadena.charAt() es el estándar original y funciona en todos los navegadores. En IE 8+ y otros navegadores, puede usar la notación de corchetes para acceder a los caracteres, pero IE 7 y versiones inferiores no lo soportaban.

Si alguien realmente quiere usar la notación de corchetes en IE 7, es aconsejable convertir la cadena en una matriz usando str.split('') y luego usarla como una matriz, compatible con cualquier navegador.

var testString = "Hello"; 
var charArr = testString.split("");
charArr[1]; // "e"
 11
Author: CharithJ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-02 22:27:54

Resultado muy interesante cuando se prueba el accessor de índice de cadena vs el método charAt(). Parece que Chrome es el único navegador que le gusta charAt más.

CharAt vs índice 1

Gráfico vs índice 2

ChartAt vs índice 3

 9
Author: Arman McHitarian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-16 12:48:50