Czy jest jakiś powód, dla którego powinienem użyć string.charAt(x)
zamiast notacji w nawiasie string[x]
?
javascript
string
Mikser
źródło
źródło
"😃".charAt(0)
zwróci postać, której nie możnaOdpowiedzi:
Notacja w nawiasach działa teraz we wszystkich głównych przeglądarkach, z wyjątkiem IE7 i niższych.
Używanie nawiasów to zły pomysł z następujących powodów ( Źródło ):
źródło
Z MDN :
str.charAt(i)
jest lepszy z punktu widzenia kompatybilności, jeśli wymagana jest kompatybilność z IE6 / IE7.str[i]
jest bardziej nowoczesny i działa w IE8 + i wszystkich innych przeglądarkach (wszystkie Edge / Firefox / Chrome, Safari 2+, wszystkie iOS / Android).źródło
Mogą dawać różne wyniki w przypadkach krawędzi.
Funkcja charAt zależy od tego, w jaki sposób indeks jest konwertowany na liczbę w specyfikacji .
źródło
'hello'[undefined] // undefined
i'hello'.charAt(undefined) //h
null
działa jakundefined
, ale zobacz to:"hello"["00"] // undefined
ale"hello".charAt("00") // "h"
i"hello"["0"] // "h"
[]
..charAt()
wykonuje dodatkową konwersję swojego parametru naNumber
. Do Twojej wiadomości, obecnie nie ma prawie żadnej różnicy w wydajności.String.charAt () jest oryginalnym standardem i działa we wszystkich przeglądarkach. W IE 8+ i innych przeglądarkach możesz używać notacji w nawiasach, aby uzyskać dostęp do znaków, ale IE 7 i niższe nie obsługują tego.
Jeśli ktoś naprawdę chce użyć notacji nawiasowej w IE 7, mądrze jest przekonwertować ciąg znaków na tablicę za pomocą,
str.split('')
a następnie użyć go jako tablicy kompatybilnej z dowolną przeglądarką.źródło
Bardzo interesujący wynik podczas testowania modułu indeksującego ciąg znaków w porównaniu z
charAt()
metodą. Wygląda na to, że Chrome jest jedyną przeglądarką, która lubicharAt
więcej.CharAt vs indeks 1
ChartAt vs. indeks 2
ChartAt vs. indeks 3
źródło
index
jest też znacznie szybszy w chrome.Jest różnica, gdy próbujesz uzyskać dostęp do indeksu, który jest poza zakresem lub nie jest liczbą całkowitą.
string[x]
zwraca znak nax
pozycji th wstring
if, którax
jest liczbą całkowitą od 0 dostring.length-1
, i zwracaundefined
inaczej.string.charAt(x)
konwertujex
na liczbę całkowitą przy użyciu opisanego tutaj procesu (który zasadniczo zaokrągla wx
dół, jeślix
jest liczbą niecałkowitą i zwraca 0, jeśliparseInt(x)
jestNaN
), a następnie zwraca znak w tej pozycji, jeśli liczba całkowita jest między 0string.length-1
, a w przeciwnym razie zwraca pusty ciąg .Oto kilka przykładów:
Inną różnicą jest to, że przypisanie do
string[x]
niczego nie robi (co może być mylące), a przypisanie dostring.charAt(x)
jest błędem (zgodnie z oczekiwaniami):Powodem, dla którego przypisywanie do
string[x]
nie działa, jest to, że ciągi JavaScript są niezmienne .źródło