Для своего блога я хотел исследовать последнюю реализацию String в javascript, чтобы понять, почему мы можем получить доступ к символам в строке через квадратные скобки, как показано ниже.

Это исследование было вызвано тем, что я пытался понять, как такой тип доступа возможен для строки, поскольку вызов typeof со строкой просто возвращает строку, но мы обращаемся к символу, как если бы строка была массивом.

Изучая это, я не нашел статьи или объяснения, в которых конкретно объяснялось бы, почему это возможно, но я нашел разные источники, которые все вместе помогли мне сформулировать теорию о том, почему мы можем это сделать, и разбили их на разные пункты.

Вещи, чтобы понять.

#1: Все объекты имеют свойства

Чтобы получить свойства объекта или типа данных, введите Object.prototype или, в данном случае, String.prototype.

Здесь мы видим, что String имеет свойства "”, которые являются самой строкой, length, которые являются парой ключ-значение с длиной ключа и значением, которое является длиной строки. У нас также есть несколько функций, одна из которых является конструктором. Есть гораздо больше функций, которые не показаны, но общий вывод заключается в том, что "”, length и различные функции - все это свойства String.

# 2: Доступ к свойствам объекта

На изображении ниже показаны 3 различных способа вызова свойства объекта.

Вторая и третья формы — это то, на чем я хочу сосредоточиться для целей этого блога, поскольку это ведет к следующему фрагменту связанного материала.

Изучая доступ к свойствам javascript в stackoverflow, я наткнулся на длинный ответ Сагала Мунджала на вопрос о точечной нотации и доступе к скобочной нотации. Часть, которая заинтриговала меня больше всего, заявила,

По иронии судьбы, наиболее важной частью информации является та часть, которая не выделена жирным шрифтом…

#3: Элементы массива хранятся в свойствах.

Так что, возможно, аналогичная ассоциация создается с символами в строках. Это означало бы, что каждый символ может быть сохранен как свойство, где ключ является его индексом в строке, а значением является символ (строка длины 1) с этим фактическим индексом в строке. Чтобы попытаться доказать это, я искал метод, который позволил бы мне увидеть свойства, принадлежащие конкретному экземпляру строки. Вот, метод hasOwnProperty. Этот метод просто возвращает значение true, если объект, для которого вызывается этот метод, имеет свойство с именем, совпадающим со значением параметра. Мой тест показан ниже с очень точным утверждением.

Из моего теста видно, что для каждого символа в строке существует свойство, поскольку функция hasOwnProperty возвращает значение true вплоть до «24», что с точки зрения индекса соответствует 1 позиции после последнего значения индекса в строке. На рисунке ниже показано, что свойства фактически содержат соответствующие символы в строке.

В заключение я понимаю, что через свойства мы можем получить доступ к отдельным символам в строке, используя скобки. Следующим шагом теперь является изучение того, когда и как на самом деле создаются эти свойства.

Из моего теста видно, что для каждого символа в строке существует свойство, поскольку функция hasOwnProperty возвращает значение true вплоть до «24», что с точки зрения индекса соответствует 1 позиции после последнего значения индекса в строке. На рисунке ниже показано, что свойства фактически содержат соответствующие символы в строке.

В заключение я понимаю, что через свойства мы можем получить доступ к отдельным символам в строке, используя скобки. Следующим шагом теперь является изучение того, когда и как на самом деле создаются эти свойства.