Копирование, передача и сравнение данных

Способ копирования, передачи и сравнения данных в JScript зависит от способа их хранения, который, в свою очередь, зависит от типа данных. В JScript данные сохраняются или по значению, или по ссылке.

По значению илипо ссылке

JScript копирует, передает и сравнивает числа и логические значения (true и false) по значению. При этом в памяти компьютера выделяется область в которую копируется значение оригинала. Изменение оригинала не влияет на копию (и наоборот), так как это две независимые записи. Два числа или логических значения считаются равными, если они имеют одинаковое значение.

JScript копирует, передает и сравнивает объекты, массивы и функции по ссылке. При этом создается ссылка на исходный элемент, которая используется, как если бы она являлась копией. Изменения в оригинале применяются также и к копии (и наоборот). На самом деле существует только одна запись; копия представляет собой просто ссылку на эти данные.

Для успешного сравнения по ссылке две переменные должны ссылаться на одну и ту же запись. Например, два отдельных объекта Array всегда будут неравны друг другу, даже если они содержат одинаковые элементы. Одна из переменных должна являться ссылкой на другую переменную, чтобы их сравнение было успешным. Чтобы проверить, совпадают ли элементы двух массивов, сравните результаты выполнения метода toString().

JScript также копирует и передает строки по ссылке. Способ сравнения строк зависит от того, являются ли эти строки объектами. Два объекта String (созданные с помощью new String("текст")) сравниваются по ссылке. Если одна или обе ссылки являются буквенными или примитивными строковыми значениями, они сравниваются по значению. Дополнительные сведения см. в разделе Операторы равенства и присваивания в JScript.

Примечание

Наборы символов ASCII и ANSI созданы таким образом, что заглавные буквы стоят в порядке последовательности перед буквами нижнего регистра.Например, строка "Zoo" имеет меньшее значение по сравнению со строкой "aardvark". Чтобы выполнить сравнение без учета регистра, можно вызвать для обеих строк метод toUpperCase() или toLowerCase().

Параметры функции

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

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

function clobber(param) {
   // Overwrite the parameter; this will not be seen in the calling code
   param = new Object();
   param.message = "This will not work.";
}

function update(param) {
    // Modify the property of the object; this will be seen in the calling code.
    param.message = "I was changed.";
}

// Create an object, and give it a property.
var obj = new Object();
obj.message = "This is the original.";

// Call clobber, and print obj.message.
clobber(obj);
print(obj.message);

// Call update, and print obj.message.
update(obj);
print(obj.message);

Результаты выполнения данного кода следующие.

This is the original.
I was changed.

Сравнение данных

В JScript данные можно сравнивать или по значению, или по ссылке. Чтобы выполнить проверку по значению, JScript сравнивает два отдельных элемента и определяет их равенство. Обычно такое сравнение выполняется побитово. Когда проверка выполняется по ссылке, программа определяет, ссылаются ли два элемента на один и тот же элемент. Если это так, они считаются равными; если нет (хотя они могут содержать одинаковые значения), побитовое сравнение выявляет их неравенство.

Строки можно сравнивать по значению или по ссылке в зависимости от того, являются ли они объектами. Если обе ссылки являются объектами String, они сравниваются по ссылке, в противном случае они сравниваются по значению. Это позволяет сравнивать две строки как равные, если они были созданы по отдельности, но содержат одинаковые данные. Чтобы сравнить значения двух объектов String, сначала преобразуйте эти объекты в строки, не являющиеся объектами, с помощью метода toString или valueOf, а затем сравните их. Дополнительные сведения см. в разделе Операторы равенства и присваивания в JScript.

См. также

Основные понятия

Операторы равенства и присваивания в JScript

Сводка типов данных

Другие ресурсы

Обзор языка JScript

Функции JScript