目录
ECMA-262 描述了一组用于操作数据值的操作符,包括算术操作符(如加号和减号)、位操作符、关系操作符和布尔操作符等。
1.赋值运算符
简单的赋值操作符由等于号(=)表示,其作用就是把右侧的值赋给左侧的变量,如下面的例子所示:
var num = 10;
如果在等于号(=)前面再添加乘性操作符、加性操作符或位操作符,就可以完成复合赋值操作。这种复合赋值操作相当于是对下面常规表达式的简写形式:
var num = 10;
num = num + 10;
其中的第二行代码可以用一个复合赋值来代替:
var num = 10;
num += 10;
每个主要算术操作符(以及个别的其他操作符)都有对应的复合赋值操作符。这些操作符如下所示:
var a += 2; // 加/赋值(+=); //该语句等价于 var a; a = a + 2;
var b -= 2; // 减/赋值(-=); //该语句等价于 var a; a = a - 2;
var c *= 2; // 乘/赋值(*=); //该语句等价于 var a; a = a * 2;
var d /= 2; // 除/赋值(/=); //该语句等价于 var a; a = a / 2;
var e %= 2; // 模/赋值(%=); //该语句等价于 var a; a = a % 2;
/*
左移/赋值(<<=);
result = 【要位移的数字】 << 【位移位数】
按位左移运算符 (<<) 将 【要位移的数字】 的位左移 【位移位数】中指定的位数。
例:
var temp;
temp = 14 << 2;
变量 temp 的值为 56,因为 14 (即二进制的 00001110)向左移两位等于 56 (即二进制的 00111000)。Javascript 按位左移运算符 (<<) 将表达式数字转换成二进制,之后向左移表达式的位。
*/
2.算数操作符
(1)递增和递减操作符
递增和递减操作符直接借鉴自 C,而且各有两个版本:前置型和后置型。顾名思义,前置型应该位于要操作的变量之前,而后置型则应该位于要操作的变量之后。因此,在使用前置递增操作符给一个数值加 1 时,要把两个加号(++)放在这个数值变量前面,如下所示:
var age = 29;
++age;
在上面这个例子中,前置递增操作符把 age 的值变成了 30(为 29 加上了 1)。实际上,执行这个前置递增操作与执行以下操作的效果相同:
var age = 29;
age = age + 1;
执行前置递减操作的方法也类似,结果会从一个数值中减去 1。使用前置递减操作符时,要把两个减号(--)放在相应变量的前面,如下所示:
var age = 29;
--age;
这样, age 变量的值就减少为 28(从 29 中减去了 1)。执行前置递增和递减操作时,变量的值都是在语句被求值以前改变的。
var age = 29;
var anotherAge = --age + 2;
alert(age); // 输出 28
alert(anotherAge); // 输出 30
由于前置递增和递减操作与执行语句的优先级相等,因此整个语句会从左至右被求值。
总结:后置++ 先用其原值作为表达式的值,再对本身进行自加;
前置++ 先对其本身自加,再用其值作为表达式的值。
后置++与前置++对于变量本身无区别。
(2)乘法
乘法操作符由一个星号(*)表示,用于计算两个数值的乘积。
其语法类似于 C,如下面的例子所示:
var result = 34 * 56;
在处理特殊值的情况下,乘法操作符遵循下列特殊的规则:
- 如果操作数都是数值,执行常规的乘法计算,即两个正数或两个负数相乘的结果还是正数,而如果只有一个操作数有符号,那么结果就是负数。如果乘积超过了 ECMAScript 数值的表示范围,则返回 Infinity 或-Infinity;
- 如果有一个操作数是 NaN(not a number),则结果是 NaN;
- 如果是 Infinity 与 0 相乘,则结果是 NaN;
- 如果是 Infinity 与非 0 数值相乘,则结果是 Infinity 或-Infinity,取决于有符号操作数的符号;
- 如果是 Infinity 与 Infinity 相乘,则结果是 Infinity;
- 如果有一个操作数不是数值,则在后台调用 Number()将其转换为数值,然后再应用上面的规则。
(3)除法
除法操作符由一个斜线符号(/)表示,执行第二个操作数除第一个操作数的计算,如下面的例子所示:
var result = 66 / 11;
与乘法操作符类似,除法操作符对特殊的值也有特殊的处理规则。这些规则如下:
- 如果操作数都是数值,执行常规的除法计算,即两个正数或两个负数相除的结果还是正数,而如果只有一个操作数有符号,那么结果就是负数。如果商超过了 ECMAScript 数值的表示范围,则返回 Infinity 或-Infinity;
- 如果有一个操作数是 NaN,则结果是 NaN;
- 如果是 Infinity 被 Infinity 除,则结果是 NaN;
- 如果是零被零除,则结果是 NaN;
- 如果是非零的有限数被零除,则结果是 Infinity 或-Infinity,取决于有符号操作数的符号;
- 如果是 Infinity 被任何非零数值除,则结果是 Infinity 或-Infinity,取决于有符号操作数的符号;
- 如果有一个操作数不是数值,则在后台调用 Number()将其转换为数值,然后再应用上面的规则。
(4)加法
加法操作符(+)的用法如下所示:
var result = 1 + 2;
如果两个操作符都是数值,执行常规的加法计算,然后根据下列规则返回结果:
- 如果有一个操作数是 NaN