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

В JScript оператор присвоения присваивает значение переменной. Оператор равенства сравнивает два значения.

Присвоения

Как и в многих других языках программирования, в JScript используется знак равенства (=) для присвоения значений переменным. Это оператор присвоения. Левый операнд оператора = должен иметь тип Lvalue, то есть это может быть переменная, элемент массива или свойство объекта.

Правый операнд оператора = должен иметь тип Rvalue. Операнд типа Rvalue может быть произвольным значением любого типа, включая значение, являющееся результатом выражения. Ниже приведен пример оператора присвоения в JScript.

anInteger = 3;

JScript интерпретирует данный оператор как означающий:

"Присвоить значение 3 переменной anInteger,"

или

"anInteger принимает значение 3".

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

В данном примере целочисленное значение, хранящееся в переменной i, преобразуется в значение типа double при присвоении переменной x.

var i : int = 29;
var x : double = i;

Дополнительные сведения см. в разделе Преобразование типов.

Равенство

В отличие от некоторых языков программирования, в JScript знак равенства (=) не используется как оператор сравнения, он служит в качестве оператора присвоения. Для сравнения двух значений можно использовать либо оператор равенства (==), либо оператор строгого равенства (===).

Оператор равенства сравнивает простые строки, числа и логические значения. Если две переменных имеют одинаковое значение (после преобразования типов, если оно необходимо), то оператор равенства возвращает значение true. Объекты (включая объекты Array, Function, String, Number, Boolean, Error, Date и RegExp) сравниваются по ссылке. Даже если две переменные объекта имеют одинаковое значение, сравнение возвращает значение true только в том случае, если они ссылаются на один и тот же объект.

Оператор строгого равенства сравнивает и значение, и тип двух выражений; значение true возвращается только в том случае, если у двух выражений совпадают значения и тип данных.

Примечание

Оператор строгого равенства не делает различия между разными числовыми типами данных.Обратите внимание на разницу между оператором присвоения, оператором равенства и оператором строгого равенства.

Результат сравнения в скриптах всегда будет иметь тип логического значения. Рассмотрим следующую строку кода JScript.

y = (x == 2000);

Здесь значение переменной x проверяется на равенство числу 2000. Если оно равно 2000, результатом сравнения является логическое значение true, которое присваивается переменной y**.** Если значение x не равно 2000, результатом сравнения является логическое значение false, которое присваивается переменной y.

Оператор равенства выполняет преобразование типов для проверки равенства значений. В следующей строке кода JScript строковый литерал "42" будет преобразован в число перед сравнением с числом 42. Результат сравнения — true.

42 == "42";

Объекты сравниваются по различным правилам. Поведение оператора равенства зависит от типа объектов. Если объекты являются экземплярами класса, определенного с оператором равенства, возвращенное значение зависит от реализации этого оператора. Классы, предоставляющие оператор равенства, нельзя определить в JScript, хотя другие языки .NET Framework допускают такие определения классов.

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

// A primitive string.
var string1 = "Hello";
// Two distinct String objects with the same value.
var StringObject1 = new String(string1);
var StringObject2 = new String(string1);

// An object converts to a primitive when
// comparing an object and a primitive.
print(string1 == StringObject1);   // Prints true.

// Two distinct objects compare as different.
print(StringObject1 == StringObject2);   // Prints false.

// Use the toString() or valueOf() methods to compare object values.
print(StringObject1.valueOf() == StringObject2);   // Prints true.

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

if (x == 2000)
   z = z + 1;
else
   x = x + 1;

Оператор if...else в JScript выполняет одно действие (в данном случае z = z + 1), если значение x равно 2000, и другое действие (x = x + 1), если значение x не равно 2000. Дополнительные сведения см. в разделе Условные структуры в JScript.

Оператор строгого равенства (===) выполняет преобразование типов только для числовых типов данных. Это означает, что целочисленное значение 42 считается равным значению 42 типа double, но оба этих значения не являются равными строке "42". В следующем примере кода JScript показано такое поведение.

var a : int = 42;
var b : double = 42.00;
var c : String = "42";
print(a===b); // Displays "true".
print(a===c); // Displays "false".
print(b===c); // Displays "false".

См. также

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

Логические данные

Преобразование типов

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

Обзор языка JScript

Условные структуры в JScript