2.9.7 等性运算符
判断两个变量是否相等是程序设计中非常重要的运算。在处理原始值时,这种运算相当简单,但涉及对象,任务就稍有点复杂。ECMAScript提供了两套运算符处理这个问题,等号和非等号用于处理原始值,全等号和非全等号用于处理对象。
1. 等号和非等号
在ECMAScript中,等号由双等号(= =)表示,当且仅当两个运算数相等时,它返回true。非等号是感叹号加等号(!=),当且仅当两个运算数不相等时,它返回true。为确定两个运算数是否相等,这两个运算符都会进行类型转换。
执行类型转换的基本规则如下:
q 如果一个运算数是Boolean值,在检查相等性之前,把它转换成数字值。false转换成0,true转换成1。
q 如果一个运算数是字符串,另一个是数字,在检查相等性之前,要尝试把字符串转换成数字。
q 如果一个运算数是对象,另一个是字符串,在检查相等性之前,要尝试把对象转换成字符串(调用toString()方法)。
q
如果一个运算数是对象,另一个是数字,在检查相等性之前,要尝试把对象转换成数字。
在进行比较时,该运算符还遵守下列规则:
q 值null和undefined相等。
q 在检查相等性时,不能把null和undefined转换成其他值。
q 如果某个运算数是NaN,等号将返回false,非等号将返回true。重要提示:即使两个运算数都是NaN,等号仍然返回false,因为根据规则,NaN不等于NaN。
q 如果两个运算数都是对象,那么比较的是它们的引用值。如果两个运算数指向同一个对象,那么等号返回true,否则两个运算数不等。
下表列出了一些特殊情况及它们的结果:
|
表 达 式 |
值 |
|
null = = undefined |
true |
|
"NaN" = = NaN |
false |
|
5 = = NaN |
false |
|
NaN = = NaN |
false |
|
NaN != NaN |
true |
|
false = =0 |
true |
|
true = =1 |
true |
|
true = = 2 |
false |
|
undefined = = 0 |
false |
|
null = = 0 |
false |
|
"5" = = 5 |
true |
2. 全等号和非全等号
等号和非等号的同类运算符是全等号和非全等号。这两个运算符所做的与等号和非等号相同,只是它们在检查相等性前,不执行类型转换。全等号由三个等号(= = =)表示,只有在无需类型转换运算数就相等的情况下,才返回true。例如:
![]()
在这段代码中,第一个警告使用等号比较字符串"55"和数字55,输出"true"。如前所述,这是因为字符串"55"将被转换成数字55,然后才与另一个数字55进行比较。第二个警告使用全等号在没有类型转换的情况下比较字符串和数字,当然,字符串不等于数字,所有输出"false"。
非全等号由感叹号加两个等号(!= =)表示,只有在无需类型转换运算数不相等的情况下,才返回true。例如:
![]()
这里,第一个警告使用非等号,把字符串"55"转换成数字55,使得它与第二个运算数55相等。因此,计算结果为false,因为两个运算数被看作是相等的。第二个警告使用的是非全等号。该运算是在问:“sNum与iNum不同吗?”这个问题的答案是:“是的(true)”,因为sNum是字符串,而iNum是数字,它们当然不同。
2.9.8 条件运算符
条件运算符是ECMAScript中功能最多的运算符,它的形式与Java中的相同:
![]()
该表达式主要是根据boolean_expression的计算结果有条件的为变量赋值。如果boolean_expression为true,就把true_value赋给变量,如果它是false,就把false_value赋给变量。例如:
![]()
在这个例子中,iMax将被赋予数字中的最大值。表达式声明如果iNum1大于iNum2,则把iNum1赋予iMax。但如果表达式为false(即iNum2大于或等于iNum1),则把iNum2赋予iMax。
2.9.9 赋值运算符
简单的赋值运算由等号(=)实现,只是把等号右边的值赋予等号左边的变量。例如:
![]()
复合赋值运算是由乘性运算符、加性运算符或位移运算符加等号(=)实现的。这些赋值运算符是下列这些常见情况的缩写形式:
![]()
可以用一个复合赋值运算符改写第二行代码:
![]()
每种主要的算术运算以及其他几个运算都有复合赋值运算符:
q 乘法/赋值(* =);
q 除法/赋值(/=);
q 取模/赋值(%=);
q 加法/赋值(+=);
q 减法/赋值(-=);
q 左移/赋值(<<=);
q 有符号右移/赋值(>>=);
q 无符号右移/赋值(>>>=)。
2.9.10 逗号运算符
用逗号运算符可以在一条语句中执行多个运算。例如:
![]()
逗号运算符最常用于变量声明中。







