Операторы равенства и присвоения в JScript
Обновлен: Ноябрь 2007
В 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".