Відповіді:
Нотація дужок тепер працює у всіх основних браузерах, крім IE7 та нижче.
// Bracket Notation
"Test String1"[6]
// charAt Implementation
"Test String1".charAt(6)
Раніше було поганою ідеєю використовувати дужки з цих причин ( Джерело ):
Це позначення не працює в IE7. Перший фрагмент коду повернеться невизначеним в IE7. Якщо ви хочете використовувати позначення дужок для рядків у всьому коді, і ви хочете перейти до них
.charAt(pos), це справжній біль: дужки використовуються у всьому коді, і немає простого способу визначити, чи це для рядка чи масиву / об’єкт.Ви не можете встановити символ за допомогою цього позначення. Оскільки жодних попереджень немає, це дійсно заплутано і засмучує. Якби ви використовували цю
.charAt(pos)функцію, ви б не спокусилися це зробити.
Від MDN :
Є два способи отримати доступ до окремого символу в рядку. Перший -
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).Вони можуть дати різні результати у кращих випадках.
'hello'[NaN] // undefined
'hello'.charAt(NaN) // 'h'
'hello'[true] //undefined
'hello'.charAt(true) // 'e'
Функція charAt залежить від того, як індекс перетворюється на число в специфікації .
'hello'[undefined] // undefinedі'hello'.charAt(undefined) //h
nullпрацює як undefined, але дивіться це: "hello"["00"] // undefinedале "hello".charAt("00") // "h"і"hello"["0"] // "h"
[].
.charAt()виконує додаткове перетворення свого параметра в a Number. FYI, в даний час майже немає різниці в продуктивності.
String.charAt () - оригінальний стандарт і працює у всіх браузерах. У IE 8+ та інших браузерах ви можете використовувати позначення дужок для доступу до символів, але IE 7 і нижче не підтримують його.
Якщо хтось дійсно хоче використовувати позначення дужок в IE 7, розумно перетворити рядок у масив, str.split('')а потім використовувати його як масив, сумісний з будь-яким браузером.
var testString = "Hello";
var charArr = testString.split("");
charArr[1]; // "e"
Дуже цікавий результат, коли ви протестуєте індексний рядок accessor vs charAt()метод. Здається, Chrome - єдиний браузер, якому charAtбільше подобається .
indexшвидше в хромі теж.
Існує різниця, коли ви намагаєтеся отримати доступ до індексу, який знаходиться поза межами чи не є цілим числом.
string[x]повертає символ у xth-й позиції у, stringякщо xце ціле число між 0 і string.length-1, і повертається в undefinedіншому випадку.
string.charAt(x)перетворюється xна ціле число, використовуючи описаний тут процес (який в основному округляє x, якщо xце не ціле число, і повертає 0, якщо parseInt(x)є NaN), а потім повертає символ у цій позиції, якщо ціле число знаходиться між 0 і string.length-1, і повертає порожню рядок інакше .
Ось кілька прикладів:
"Hello"[313] //undefined
"Hello".charAt(313) //"", 313 is out of bounds
"Hello"[3.14] //undefined
"Hello".charAt(3.14) //'l', rounds 3.14 down to 3
"Hello"[true] //undefined
"Hello".charAt(true) //'e', converts true to the integer 1
"Hello"["World"] //undefined
"Hello".charAt("World") //'H', "World" evaluates to NaN, which gets converted to 0
"Hello"[Infinity] //undefined
"Hello".charAt(Infinity) //"", Infinity is out of bounds
Ще одна відмінність полягає в тому, що присвоєння string[x]нічого не робить (що може заплутати), а присвоєння string.charAt(x)- помилка (як очікувалося):
var str = "Hello";
str[0] = 'Y';
console.log(str); //Still "Hello", the above assignment did nothing
str.charAt(0) = 'Y'; //Error, invalid left-hand side in assignment
Причина, чому призначення string[x]не працює, полягає в тому, що рядки Javascript незмінні .
"😃".charAt(0), поверне непридатний символ