¿Hay alguna razón que deba usar en string.charAt(x)
lugar de la notación de corchetes string[x]
?
javascript
string
Licuadora
fuente
fuente
"😃".charAt(0)
devolverá un carácter inutilizableRespuestas:
La notación de corchetes ahora funciona en todos los principales navegadores, excepto IE7 y versiones inferiores.
Solía ser una mala idea usar corchetes, por estos motivos ( Fuente ):
fuente
De MDN :
str.charAt(i)
es mejor desde una perspectiva de compatibilidad si se requiere compatibilidad con IE6 / IE7.str[i]
es más moderno y funciona en IE8 + y en todos los demás navegadores (todos Edge / Firefox / Chrome, Safari 2+, todos iOS / Android).fuente
Pueden dar resultados diferentes en casos extremos.
La función charAt depende de cómo se convierte el índice en un Número en la especificación .
fuente
'hello'[undefined] // undefined
y'hello'.charAt(undefined) //h
null
funciona comoundefined
, pero mira esto:"hello"["00"] // undefined
pero"hello".charAt("00") // "h"
y"hello"["0"] // "h"
[]
..charAt()
realiza una conversión adicional para su parámetro en aNumber
. Para su información, casi no hay diferencia de rendimiento hoy en día.String.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 posteriores no lo admitieron.
Si alguien realmente quiere usar la notación de corchetes en IE 7, es aconsejable convertir la cadena a una matriz usando
str.split('')
y luego usarla como una matriz, compatible con cualquier navegador.fuente
Resultado muy interesante cuando prueba el descriptor de acceso al índice de cadena frente al
charAt()
método Parece que Chrome es el único navegador que le gustacharAt
más.CharAt vs índice 1
ChartAt vs índice 2
ChartAt vs índice 3
fuente
index
también es mucho más rápido en cromo.Hay una diferencia cuando intenta acceder a un índice que está fuera de los límites o no es un número entero.
string[x]
devuelve el carácter en lax
posición th enstring
ifx
es un número entero entre 0 ystring.length-1
, y devuelve loundefined
contrario.string.charAt(x)
se conviertex
en un entero utilizando el proceso explicado aquí (que básicamente redondeax
hacia abajo six
es un número no entero y devuelve 0 siparseInt(x)
esNaN
) y luego devuelve el carácter en esa posición si el entero está entre 0 ystring.length-1
, de lo contrario, devuelve una cadena vacía .Aquí hay unos ejemplos:
Otra diferencia es que asignar a
string[x]
no hace nada (lo que puede ser confuso) y asignarstring.charAt(x)
es un error (como se esperaba):La razón por la que asignar a
string[x]
no funciona es porque las cadenas de Javascript son inmutables .fuente