Existe algum motivo para eu usar em string.charAt(x)
vez da notação de colchete string[x]
?
javascript
string
Liquidificador
fonte
fonte
"😃".charAt(0)
irá retornar um carácter inutilizávelRespostas:
A notação de colchete agora funciona em todos os principais navegadores, exceto no IE7 e abaixo.
Costumava ser uma má idéia usar colchetes, por esses motivos ( Fonte ):
fonte
Do MDN :
str.charAt(i)
é melhor do ponto de vista da compatibilidade se a compatibilidade com o IE6 / IE7 for necessária.str[i]
é mais moderno e funciona no IE8 + e em todos os outros navegadores (todos Edge / Firefox / Chrome, Safari 2+, todos iOS / Android).fonte
Eles podem dar resultados diferentes em casos extremos.
A função charAt depende de como o índice é convertido em um número na especificação .
fonte
'hello'[undefined] // undefined
e'hello'.charAt(undefined) //h
null
funciona assimundefined
, mas veja isto:"hello"["00"] // undefined
mas"hello".charAt("00") // "h"
e"hello"["0"] // "h"
[]
..charAt()
realiza uma conversão extra para seu parâmetro em aNumber
. Para sua informação, quase não há diferença de desempenho atualmente.String.charAt () é o padrão original e funciona em todos os navegadores. No IE 8+ e em outros navegadores, você pode usar a notação de colchete para acessar caracteres, mas o IE 7 e abaixo não o suportam.
Se alguém realmente deseja usar a notação de colchete no IE 7, é aconselhável converter a string em uma matriz usando
str.split('')
e depois usá-la como uma matriz, compatível com qualquer navegador.fonte
Resultado muito interessante quando você testa o acessador de índice de strings versus o
charAt()
método Parece que o Chrome é o único navegador que gostacharAt
mais.CharAt vs índice 1
ChartAt vs índice 2
ChartAt vs índice 3
fonte
index
também é muito mais rápido no chrome.Há uma diferença quando você tenta acessar um índice que está fora dos limites ou não é um número inteiro.
string[x]
retorna o caractere nax
posição th emstring
sex
for um número inteiro entre 0 estring.length-1
, e retornaundefined
caso contrário.string.charAt(x)
convertex
para um número inteiro usando o processo explicado aqui (que basicamente arredondax
para baixo sex
é um número não inteiro e retorna 0 separseInt(x)
forNaN
) e, em seguida, retorna o caractere nessa posição se o número inteiro estiver entre 0 estring.length-1
, e retorna uma string vazia, caso contrário .aqui estão alguns exemplos:
Outra diferença é que atribuir a
string[x]
não faz nada (o que pode ser confuso) e atribuir astring.charAt(x)
é um erro (como esperado):A razão pela qual atribuir a
string[x]
não funciona é porque as strings Javascript são imutáveis .fonte