Элементарные и ссылочные типы

Мы часто говорим, что переменные содержат значения. Что же они содержат в действительности? Чтобы ответить на этот, казалось бы, простой вопрос, мы должны снова взглянуть на типы данных, поддерживаемые JavaScript. Эти типы можно разделить на две группы: элементарные и ссылочные.

Числа, логические значения, а также значения null и undefined – это элементарные типы. Объекты, массивы и функции – это ссылочные типы.

Элементарный тип имеет фиксированный размер. Например, число занимает восемь байтов, а логическое значение может быть представлено всего одним битом. Числовой тип – самый большой из элементарных типов.

Если для каждой JavaScript-переменной зарезервировано в памяти восемь байтов, переменная может непосредственно содержать значение любого элементарного типа.

Однако ссылочные типы – это другое дело. Например, объекты могут быть любой длины – они не имеют фиксированного размера. То же самое относится и к массивам: массив может иметь любое число элементов. Аналогично функция может содержать любой объем JavaScript-кода. Поскольку данные типы не имеют фиксированного размера, их значения не могут непосредственно храниться в восьми байтах памяти, связанных с каждой переменной. Поэтому в переменной хранится ссылка на это значение. Обычно эта ссылка представляет собой какой-либо указатель или адрес в памяти. Ссылка – это не само значение, но она сообщает переменной, где это значение можно найти.

Различие между элементарными и ссылочными типами существенно, т.к. они ведут себя по-разному. Рассмотрим следующий код, оперирующий числами (элементарный тип):

var a = 3.14; // Объявление и инициализация переменной

var b = a; // Копирование значения переменной в новую переменную

a = 4; // Модификация значения исходной переменной

alert(b) // Показывает 3.14; копия не изменилась

Теперь посмотрим, что произойдет, если слегка изменить код, заменив числа массивами (ссылочный тип):

var a = [1,2,3]; // Инициализируем переменную ссылкой на массив

var b = a; // Копируем эту ссылку в новую переменную

a[0] = 99; // Изменяем массив, используя первоначальную ссылку

alert(b); // Показываем измененный массив [99,2,3], используя новую ссылку

Обратите внимание, что выполняется присваивание ссылки на значение типа «массив», а не присваивание самого массива. После второй строки фрагмента мы все еще имеем один объект массива; нам только удалось получить две ссылки на него.

Относятся ли строки в JavaScript к базовым или к ссылочным типам? Строки – это необычный случай. Они имеют переменную длину и потому, очевидно, не могут храниться непосредственно в переменных фиксированного размера. Исходя из соображений эффективности можно ожидать, что интерпретатор JavaScript будет копировать ссылки на строки, а не их фактическое содержимое.

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

Комментарии

Они позволяют выделить фрагмент программы, который не выполняется интерпретатором, а служит лишь для пояснений содержания программы.

В JavaScript допустимы два вида операторов комментария:

// — одна строка символов, расположенная справа от этого оператора, считается комментарием;

/*...*/ — все, что заключено между /* и */, считается комментарием; с помощью этого оператора можно выделить несколько строк в качестве комментария.








Дата добавления: 2016-01-09; просмотров: 661;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.007 сек.