Как работает ссылка на элементы массива в Javascript? - PullRequest
0 голосов
/ 04 марта 2019

В языках низкого уровня, таких как C / C ++, массивы представляют собой «непрерывную последовательность областей памяти, содержащих значения одного и того же типа», поскольку они содержат значения одного и того же типа данных, к элементам можно обращаться напрямую, используя индекс (базовый адрес + индекс *(размер типа данных)).Но в JavaScript массивы могут содержать разные типизированные значения данных, поэтому вычисление адреса с использованием индекса и базового адреса невозможно.Не могли бы вы объяснить причины доступа к элементам массива в JavaScript.

1 Ответ

0 голосов
/ 04 марта 2019

В отличие от C / C ++, JavaScript является интерпретируемым языком.Это означает, что сам язык не делает никаких предположений о структуре используемой памяти.Теоретически вы могли бы быть интерпретатором JavaScript, если бы вы взяли бумагу и ручку и «выполнили» код вручную.Поэтому на ваш вопрос нельзя ответить однозначно: механизм может представлять значения любым способом, если он ведет себя в соответствии со спецификацией.

В спецификации только сказано, что:

1) Значения в Javascriptмогут иметь различные типы, Объекты - это определенный тип значения.

2) Объекты - это группа пар ключ-значение, тогда как ключи - это строки, а значения - любое значение

3) массивы оченьспециальные объекты, которые также допускают числа в качестве ключей (и помещают их в ближайшее целое число) и получают специальное свойство length.


Теперь, если бы я написал интерпретатор JS на C, я бы сначалаИз всех попыток каким-то образом представить «JavascriptValue» в виде некоего типа объединения:

union JavaScriptValue {
  Number;
  String;
  Boolean;
  Undefined;
  Object;
}

Теперь объект можно представить как

 unordered_map<JavaScriptValue, JavaScriptValue>
...