Есть ли какая-то причина, по которой я должен использовать string.charAt(x)
вместо обозначения скобок string[x]
?
String.charAt(x) или строка [x]?
Ответ 1
// Bracket Notation
"Test String1"[6]
// Real Implementation
"Test String1".charAt(6)
Плохая идея использовать скобки по этим причинам (Источник):
Эта нотация не работает в IE7.Первый фрагмент кода вернется undefined в IE7. Если вы используете Обозначение скобок для строк над вашим кодом, и вы хотите перенести до
.charAt(pos)
, это настоящая боль: Кронштейны используются по всему вашему коду и нет простого способа определить, если что для строки или массив/объект.Вы не можете установить символ, используя эту нотацию. Поскольку нет предупреждения о любого рода, это действительно запутывает и расстраивает. Если вы использовали
.charAt(pos)
, вы бы не были искушены сделать это.
В принципе, это ярлык, который не полностью реализован во всех браузерах.
Обратите внимание, что вы не можете писать символы, используя любой метод. Однако эту функцию немного легче понять с помощью функции .charAt()
, которая на большинстве языков является функцией только для чтения.
Ответ 2
Из MDN:
Существует два способа доступа к отдельному символу в строке. Первый - это метод
charAt
,charAt
частью ECMAScript 3:return 'cat'.charAt(1); // returns "a"
Другой способ - рассматривать строку как объект, подобный массиву, где каждый отдельный символ соответствует числовому индексу. Это поддерживается большинством браузеров с момента их первой версии, за исключением IE. Он был стандартизован в ECMAScript 5:
return 'cat'[1]; // returns "a"
Второй способ требует поддержки ECMAScript 5 (и не поддерживается в некоторых старых браузерах).
В обоих случаях попытка изменить индивидуальный символ не будет работать, поскольку строки неизменяемы, т.е. Их свойства не являются ни "доступными для записи", ни "настраиваемыми".
-
str.charAt(i)
лучше с точки зрения совместимости, если требуется совместимость с IE6/IE7. -
str[i]
более современна и работает в IE8+ и во всех других браузерах (все Edge/Firefox/Chrome, Safari 2+, все iOS/Android).
Ответ 3
Они могут давать разные результаты в случаях краев.
'hello'[NaN] // undefined
'hello'.charAt(NaN) // 'h'
'hello'[true] //undefined
'hello'.charAt(true) // 'e'
Функция charAt зависит от того, как индекс преобразуется в число в spec.
Ответ 4
String.charAt() является исходным стандартом и работает во всех браузерах. В IE 8+ и других браузерах вы можете использовать нотацию с помощью скобок для доступа к символам, но IE 7 и ниже ее не поддерживали.
Если кто-то действительно хочет использовать нотацию в IE 7, целесообразно преобразовать строку в массив с помощью str.split('')
а затем использовать ее как массив, совместимый с любым браузером.
var testString = "Hello";
var charArr = testString.split("");
charArr[1]; // "e"
Ответ 5
Очень интересный результат при тестировании индекса индекса строки и метода charAt()
. Кажется, Chrome - единственный браузер, которому больше нравится charAt
.