Відповіді:
Нотація дужок тепер працює у всіх основних браузерах, крім 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]
повертає символ у x
th-й позиції у, 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)
, поверне непридатний символ