操作符
JavaScript 有赋值、比较、算术、位、逻辑、字符串和特殊运算符。本章描述了操作符,以及关于操作符优先级的一些信息。
表 2.1 JavaScript 所有操作符简明列表。
表 2.1 JavaScript 操作符
操作符分类 | 操作符 | 描述 |
---|---|---|
算 术 操 作 符 |
+ | (加法) 将两个数相加。 |
++ | (自增) 将表示数值的变量加一(可以返回新值或旧值)。 | |
- | (求相反数,减法) 作为求相反数操作符时返回参数的相反数。作为二进制操作符时,将两个数相减。 |
|
-- | (自减) 将表示数值的变量减一(可以返回新值或旧值)。 | |
* | (乘法) 将两个数相乘。 | |
/ | (除法) 将两个数相除。 | |
% | (求余) 求两个数相除的余数。 | |
字符串操作符 | + | (字符串加法) 连接两个字符串。 |
+= | 连接两个字符串,并将结果赋给第一个字符串。 | |
逻 辑 操 作 符 |
&& | (逻辑与) 如果两个操作数都是真的话则返回真。否则返回假。 |
|| | (逻辑或) 如果两个操作数都是假的话则返回假。否则返回真。 | |
! | (逻辑非) 如果其单一操作数为真,则返回假。否则返回真。 | |
位 操 作 符 |
& | (按位与) 如果两个操作数对应位都是 1 的话则在该位返回 1。 |
^ | (按位异或) 如果两个操作数对应位只有一个 1 的话则在该位返回 1。 | |
| | (按位或) 如果两个操作数对应位都是 0 的话则在该位返回 0。 | |
~ | (求反) 反转操作数的每一位。 | |
<< | (左移) 将第一操作数的二进制形式的每一位向左移位,所移位的数目由第二操作数指定。右面的空位补零。 |
|
>> | (算术右移) 将第一操作数的二进制形式的每一位向右移位,所移位的数目由第二操作数指定。忽略被移出的位。 |
|
>>> | (逻辑右移) 将第一操作数的二进制形式的每一位向右移位,所移位的数目由第二操作数指定。忽略被移出的位,左面的空位补零。 |
|
赋 值 操 作 符 |
= | 将第二操作数的值赋给第一操作数。 |
+= | 将两个数相加,并将和赋给第一个数。 | |
-= | 将两个数相减,并将差赋给第一个数。 | |
*= | 将两个数相乘,并将积赋给第一个数。 | |
/= | 将两个数相除,并将商赋给第一个数。 | |
%= | 计算两个数相除的余数,并将余数赋给第一个数。 | |
&= | 执行按位与,并将结果赋给第一个操作数。 | |
^= | 执行按位异或,并将结果赋给第一个操作数。 | |
|= | 执行按位或,并将结果赋给第一个操作数。 | |
<<= | 执行左移,并将结果赋给第一个操作数。 | |
>>= | 执行算术右移,并将结果赋给第一个操作数。 | |
>>>= | 执行逻辑右移,并将结果赋给第一个操作数。 | |
比 较 操 作 符 |
== | 如果操作数相等的话则返回真。 |
!= | 如果操作数不相等的话则返回真。 | |
> | 如果左操作数大于右操作数的话则返回真。 | |
>= | 如果左操作数大于等于右操作数的话则返回真。 | |
< | 如果左操作数小于右操作数的话则返回真。 | |
<= | 如果左操作数小于等于右操作数的话则返回真。 | |
特 殊 操 作 符 |
?: | 执行一个简单的“if...else”语句。 |
, | 计算两个表达式,返回第二个表达式的值。 | |
delete | 允许你删除一个对象的属性或数组中指定的元素。 | |
new | 允许你创建一个用户自定义对象类型或内建对象类型的实例。 | |
this | 可用于引用当前对象的关键字。 | |
typeof | 返回一个字符串,表明未计算的操作数的类型。 | |
void | 该操作符指定了要计算一个表达式但不返回值。 |
赋值操作符
赋值操作符会根据其右操作数侧的值给左操作数赋值。
实现版本 | Navigator 2.0 |
最基本的赋值操作数是等号(=),它会将右操作数的值直接赋给左操作数。也就是说,x = y 将把 y 的值赋给
x。其它的赋值操作符都是标准操作的缩略形式,列在表 2.2 中。
表 2.2 赋值操作符
缩写操作符 | 含义 |
---|---|
x += y | x = x + y |
x -= y | x = x - y |
x *= y | x = x * y |
x /= y | x = x / y |
x %= y | x = x % y |
x <<= y | x = x << y |
x >>= y | x = x >> y |
x >>>= y | x = x >>> y |
x &= y | x = x & y |
x ^= y | x = x ^ y |
x |= y | x = x | y |
比较操作符
所谓比较操作符,就是会比较其两边的操作数,并根据比较结果为真或假返回逻辑值。操作数可以是数值或字符串值。如果使用字符串值的话,比较是基于标准的字典顺序。
实现版本 | Navigator 2.0 |
相关内容列在了表 2.3
中。对于该表中的示例,我们假定 var1 被赋予了值 3,而 var2 被赋予了值 4。
表 2.3 比较操作符
操作符 | 描述 | 返回真的例子 |
---|---|---|
相等(==) | 如果操作数相等的话则返回真。 | 3 == var1 |
不等(!=) | 如果操作数不等的话则返回真。 | var1 != 4 |
大于(>) | 如果左操作数大于右操作数的话则返回真。 | var2 > var1 |
大于或等于(>=) | 如果左操作数大于等于右操作数的话则返回真。 | var2 >= var1 var1 >= 3 |
小于(<) | 如果左操作数小于右操作数的话则返回真。 | var1 < var2 |
小于或等于(<=) | 如果左操作数小于等于右操作数的话则返回真。 | var1 <= var2 var2 <= 5 |
算术操作符
将给定数值(常量或变量)进行给定的计算,并返回一个数值。标准的算术操作符是加(+)、减(-)、乘(*)、除(/)四则运算。这些操作符与在其它编程语言中的作用一样。
实现版本 | Navigator 2.0 |
% (取余)
取余操作符用法如下:
var1 % var2
取余运算符将返回第一个操作数除以第二个操作数的余数。对于上面的例子来说,将返回 var1 变量除以 var2 变量的余数。更具体的例子是,12 % 5
将返回 2。
++ (自增)
自增操作符用法如下:
var++ 或 ++var
该自增操作符将自增操作数(自己加上 1)并返回一个值。如果写在变量后面(如
x++),将返回自增前的值。如果写在变量前面(如 ++x),将返回自增后的值。
例如,如果 x 是 3,那么语句 y = x++ 将先把 y 置为 3 再将 x 自增为 4。相反,语句 y =
++x 将先将 x 自增为 4,再将 y 置为 4。
-- (自减)
自减操作符用法如下:
var-- 或 --var
该自增操作符将自减操作数(自己减去 1)并返回一个值。如果写在变量后面(如
x--),将返回自减前的值。如果写在变量前面(如 --x),将返回自减后的值。
例如,如果 x 是 3,那么语句 y = x-- 将先把 y 置为 3 再将 x 自减为 2。相反,语句 y =
--x 将先将 x 自减为 2,再将 y 置为 2。
- (求相反数)
求相反数操作数将取得操作数的相反数。例如,y = -x 将把 x
相反数的值赋给 y;也就是说,如果 x 是 3 的话,y 就会获得 -3 而 x 还是 3。
位操作符
执行位操作时,操作符会将操作数看作一串二进制位(1和0),而不是十进制、十六进制或八进制数字。例如,十进制的 9 就是二进制的
1001。位操作符在执行的时候会以二进制形式进行操作,但返回的值仍是标准的 JavaScript 数值。
表 2.4 JavaScript 位操作符总览
表 2.4 位操作符
操作符 | 用法 | 描述 |
---|---|---|
按位与 | a & b | 如果两个操作数对应位都是 1 的话则在该位返回 1。 |
按位或 | a | b | 如果两个操作数对应位都是 0 的话则在该位返回 0。 |
按位异或 | a ^ b | 如果两个操作数对应位只有一个 1 的话则在该位返回 1。 |
求反 | ~ a | 反转操作数的每一位。 |
左移 | a << b | 将 a 的二进制形式左移 b 位。右面的空位补零。 |
算术右移 | a >> b | 将 a 的二进制形式右移 b 位。忽略被移出的位。 |
逻辑右移 | a >>> b | 将 a 的二进制形式右移 b 位。忽略被移出的位,左侧补入 0。 |
位逻辑操作符
实现版本 | Navigator 2.0 |
从原理上讲,位逻辑操作符的工作流程是这样的:
- 将操作数转换为 32 位的整型数值并用二进制表示。
- 第一操作数的每一位与第二操作数的对应位配对:第一位对第一位,第二位对第二位,以此类推。
- 对每一对位应用操作符,最终结果按位组合起来。
例如,9 的二进制表示为
1001,15 的二进制表示为 1111。所以如果对这两个数应用位逻辑操作符,结果应该像下面这样:
- 15 & 9 结果为 9 (1111 & 1001 = 1001)
- 15 | 9 为 15 (1111 | 1001 = 1111)
- 15 ^ 9 为 6 (1111 ^ 1001 = 0110)
移位操作符
实现版本 | Navigator 2.0 |
移位操作符需要两个操作数:第一个是要进行移位的数值,第二个指定要对第一个数移位的数目。移位的方向由使用的操作符决定。
移位操作符将把两个操作符转换为 32 位整型数值,并返回与左操作数类型相同的结果。
<< (左移)
该操作符将把第一个操作数向左移若干位。移出的位将被忽略。右侧空位补零。
例如,9<<2 结果为 36,因为 1001 向左移两位变成 100100,这是 36。
>> (算术右移)
该操作符将把第一个操作数享有移若干位。移出的位将被忽略。左侧的空位补上与原来最左面位相同的值。
例如,9>>2 结果为 2,因为 1001 右移两位变成 10,这是 2。反之,-9>>2
结果为 -3,因为要考虑到符号位。
>>> (逻辑右移)
该操作符将把第一个操作数享有移若干位。移出的位将被忽略。左侧的空位补零。
例如,19>>>2 结果为 4,因为 10011 右移两位变成 100,这是
4。对于非负数,算术右移和逻辑右移结果相同。
逻辑操作符
逻辑操作符用 Boolean 值(布尔逻辑值)作为操作数,并返回 Boolean
值。
实现版本 | Navigator 2.0 |
表 2.5 描述的很清楚。
表 2.5 逻辑操作符
操作符 | 用法 | 描述 |
---|---|---|
与(&&) | expr1 && expr2 | 如果 expr1 为假则返回之,否则返回 expr2。 |
或(||) | expr1 || expr2 | 如果 expr1 为真则返回之,否则返回 expr2。 |
非(!) | !expr | 如果 expr 为真则返回假,否则返回真。 |
示例
考虑下面的脚本:
<script language="JavaScript1.2">"
v1 = "猫";
v2 =
"狗";
v3 = false;
document.writeln("t && t 返回 "
+ (v1 && v2));
document.writeln("f && t 返回 " + (v3 &&
v1));
document.writeln("t && f 返回 " + (v1 &&
v3));
document.writeln("f && f 返回 " + (v3 && (3 ==
4))); document.writeln("t || t 返回 " + (v1 ||
v2));
document.writeln("f || t 返回 " + (v3 || v1));
document.writeln("t ||
f 返回 " + (v1 || v3));
document.writeln("f || f 返回 " + (v3 || (3 ==
4)));
document.writeln("!t 返回 " +
(!v1));
document.writeln("!f 返回 " + (!v3));
</script>
该脚本将显示下列内容:
t && t 返回 狗
f && t 返回 false
t
&& f 返回 false
f && f 返回 false
t || t 返回 猫
f || t 返回
猫
t || f 返回 猫
f || f 返回 false
!t 返回 false
!f 返回 true