Прямые и ссылочные значения ECMAScript

В ECMAScript переменные могут иметь два типа значений, то есть базовые значения и ссылочные значения.

Базовые и ссылочные значения

В ECMAScript переменные могут иметь два типа значений, то есть базовые значения и ссылочные значения.

Базовые значения
Простые данные, хранящиеся в памяти стека (stack), то есть их значения хранятся напрямую в месте доступа переменной.
Ссылочные значения
объекты, хранящиеся в памяти стека (heap), то есть значение, хранящееся в переменной, является указателем (pointer), который указывает на место хранения объекта в памяти.

При присвоении значения переменной интерпретатор ECMAScript должен определить, является ли это значение базовым типом или ссылочным типом. Для этого интерпретатор должен попытаться определитьявляется ли это базовым типом ECMAScriptто есть Undefined, Null, Boolean, Number и String. Поскольку эти базовые типы занимают фиксированное пространство, их можно хранить в较小ом区域内 - стоке. Это хранение упрощает быстрый поиск значений переменных.

Во многих языках строки рассматриваются как ссылочные типы, а не базовые типы, потому что длина строки может изменяться. ECMAScript打破了 эту традицию.

Если значение является ссылочным типом, его пространство хранения будет выделено из стека. Поскольку размер ссылочного значения может изменяться, его нельзя хранить в стеке,否则 это снизит скорость поиска переменных. Напротив, значение, хранящееся в пространстве стека переменной, является адресом объекта, хранящегося в памяти стека. Размер адреса фиксирован, поэтому его хранение в стеке не оказывает никакого негативного влияния на производительность переменной. Как показано на следующем рисунке:

Оригинальные значения и ссылки, хранящиеся в стеке и куче

Базовый тип

Как уже упоминалось, ECMAScript имеет 5 базовых типов (primitive type), то есть Undefined, Null, Boolean, Number и String. ECMA-262 определяет терминТип (тип)Определено как набор значений, каждый базовый тип определяет диапазон значений, содержащихся в нем, и литеральное представление этих значений.

ECMAScript предоставляет оператор typeof для определения того, является ли значение в определенном диапазоне типов.

В последующих разделах мы подробно расскажем о базовых и ссылочных типах ECMAScript.