Есть ли какая-либо причина, по которой я должен использовать string.charAt(x)
вместо обозначения скобки string[x]
?
javascript
string
смеситель
источник
источник
"😃".charAt(0)
вернет непригодный символОтветы:
Обозначение в скобках теперь работает во всех основных браузерах, кроме IE7 и ниже.
Раньше было плохой идеей использовать скобки по следующим причинам ( Источник ):
источник
От MDN :
str.charAt(i)
лучше с точки зрения совместимости, если требуется совместимость с IE6 / IE7.str[i]
более современный и работает в IE8 + и во всех других браузерах (все Edge / Firefox / Chrome, Safari 2+, все iOS / Android).источник
Они могут дать разные результаты в крайних случаях.
Функция charAt зависит от того, как индекс преобразуется в число в спецификации .
источник
'hello'[undefined] // undefined
и'hello'.charAt(undefined) //h
null
работает какundefined
, но вижу это:"hello"["00"] // undefined
но"hello".charAt("00") // "h"
и"hello"["0"] // "h"
[]
..charAt()
выполняет дополнительное преобразование своего параметра вNumber
. К вашему сведению, в настоящее время почти нет разницы в производительности.String.charAt () является оригинальным стандартом и работает во всех браузерах. В IE 8+ и других браузерах вы можете использовать скобочные обозначения для доступа к символам, но IE 7 и ниже не поддерживает его.
Если кто-то действительно хочет использовать скобочную нотацию в IE 7, целесообразно преобразовать строку в массив с помощью,
str.split('')
а затем использовать ее как массив, совместимый с любым браузером.источник
Очень интересный результат, когда вы проверяете метод доступа к строковому индексу против
charAt()
метода. Кажется, Chrome - единственный браузер, который любитcharAt
больше.CharAt против индекса 1
ChartAt vs index 2
ChartAt vs index 3
источник
index
в хроме тоже быстрее.Есть разница, когда вы пытаетесь получить доступ к индексу, который находится за пределами или не является целым числом.
string[x]
возвращает символ вx
th-й позиции вstring
if, еслиx
это целое число от 0 доstring.length-1
, и возвращает вundefined
противном случае.string.charAt(x)
преобразуетсяx
в целое число, используя описанный здесь процесс (который в основном округляетсяx
, если неx
является целым числом, и возвращает 0, еслиparseInt(x)
естьNaN
), а затем возвращает символ в той позиции, если целое число находится в диапазоне от 0 доstring.length-1
, и возвращает пустую строку в противном случае ,Вот некоторые примеры:
Другое отличие состоит в том, что назначение
string[x]
ничего не делает (что может сбить с толку), а присвоениеstring.charAt(x)
является ошибкой (как и ожидалось):Причина, по которой назначение
string[x]
не работает, заключается в том, что строки Javascript неизменны .источник