String.charAt(x) или строка [x]?

Есть ли какая-то причина, по которой я должен использовать string.charAt(x) вместо обозначения скобок string[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"