JScript 赋值与相等
更新:2007 年 11 月
在 JScript 中,赋值运算符给变量赋值。相等运算符比较两个值。
赋值
像许多编程语言一样,JScript 使用等号 (=) 给变量赋值:它是赋值运算符。= 运算符的左操作数必须是一个 Lvalue,这表示它必须是变量、数组元素或对象属性。
= 运算符的右操作数必须是一个 Rvalue。Rvalue 可以是任何类型的任意值,包括作为表达式结果的值。下面是 JScript 赋值语句的一个示例。
anInteger = 3;
JScript 将该语句解释为:
“将值 3 赋给变量 anInteger,”
或
“anInteger 得到值 3。”
如果类型批注没有将语句中的变量绑定到特定的数据类型,则赋值将始终是成功的。否则,编译器将试图把 Lvalue 转换为 Rvalue 的数据类型。如果此转换始终不能成功执行,则编译器将生成错误。如果此转换对于某些值可成功执行,对于另一些值则会失败,那么编译器将生成警告,说明当运行代码时转换可能失败。
在本例中,当赋值给变量 x 时,存储在变量 i 中的整数值将转换成一个双精度值。
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。如果是,则比较结果为布尔值 true,该值将赋给变量 y。如果 x 不等于 2000,则比较结果为布尔值 false,赋给 y。
相等运算符将进行类型转换,以检查值是否相同。在下面的 JScript 代码行中,字符串 "42" 将在与数字 42 比较之前被转换为一个数字。其结果为 true。
42 == "42";
对象使用不同的规则进行比较。相等运算符的行为取决于对象的类型。如果对象是用相等运算符定义的某个类的实例,返回值将取决于相等运算符的实现。提供相等运算符的类不能在 JScript 中定义,尽管其他 .NET Framework 语言允许这样的类定义。
对于不具有已定义相等运算符的对象(比如基于 JScript Object 对象的对象或 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;
如果 x 的值是 2000,则 JScript 中的 if...else 语句执行一个操作(本例中执行 z = z + 1),如果 x 的值不是 2000,则执行另一个操作 (x = x + 1)。有关更多信息,请参见 JScript 条件结构。
全等运算符 (===) 仅对数值数据类型执行类型转换。这意味着整数 42 被视为与双精度 42 相同,而这两者都与字符串“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".