JavaScript 运算符

JavaScript 程序操作变量时,运算符是不可或缺的重要部分。

运算符可分为以下几种:

  • 自增自减
  • 一元运算符
  • 算术运算符
  • 关系运算符
  • 相等运算符
  • 位移运算符
  • 二进制位运算符
  • 二元逻辑运算符
  • 三元条件运算符
  • 赋值运算符
  • 逗号操作符

自增自减

自增自减运算符有以下几种:

运算符 描述 示例 结果
a++ 后置自增运算符 var a = 0; a++; 1
a-- 后置自减运算符 var a = 0; a--; -1
++a 前置自增运算符 var a = 0; ++a; 1
--a 前置自减运算符 var a = 0; --a; -1

前置与后置的区别在于:前置操作在递增(减)后返回数值,后置操作在递增(减)前返回数值:

// 后置 
var x = 3;
var y = x--; // y = 3, x = 2

// 前置
var x = 3;
var y = --x; // y = 2, x = 2

一元运算符

运算符 描述 示例 结果
delete 删除对象的属性 var a = {foo: 'bar'}; delete a.foo; {}
void 表示表达式放弃返回值 var a = function(){return 'hello'}; void a() undefined
typeof 判断给定数值的类型 typeof 99 number
+ 一元加运算符将数值转换为Number类型 var a = +(true) 1
- 一元减运算符将操作转换为Number类型并取反 var a = -(true) -1
~ 按位非运算符 ~9 -10
! 逻辑非运算符 !true false

算数运算符

运算符 描述 示例 结果
+ 加法运算符 var a = 0; a = a + 2 2
- 减法运算符 var a = 0; a = a - 2 -2
/ 除法运算符 var a = 25; a = a / 5 5
* 乘法运算符 var a = 5; a = a * 5 25
% 取模运算符 var a = 100; a = a % 3 1

关系运算符

比较运算符比较二个操作数并返回表示比较结果的Boolean值。

运算符 描述 示例 结果
in 判断对象是否拥有给定属性 var a = {foo: 'bar'}; 'foo' in a true
instanceof 对象是否是另一个对象(构造函数)的实例 var a = new String('abc'); a instanceof String true
< 小于运算符 var a = 9; a < 8; false
> 大于运算符 var a = 9; a > 8; true
<= 小于等于运算符 var a = 9; a <= 9; true
>= 大于等于运算符 var a = 9; a >= 9; true
注意:=> 不是运算符,而是箭头函数的表示符。

相等运算符

相等运算符比较二个操作数并返回表示比较结果的Boolean值。

运算符 描述 示例 结果
== 相等 运算符 var a = 1; a == true true
!= 非等 运算符 var a = 0; a == true false
=== 全等 运算符 var a = 1; a === '1' false
!== 非全等 运算符 var a = 1; a === '1' true

相等("==")与全等("===")的区别

相等("==")仅仅比较两个操作数的字面值,当两个值类型不同时,JS引擎将会进行隐式地转换相同类型再进行比较。全等("===")不仅比较操作数的字面值,还比较它们的类型是否相同。所以全等是一种更严格的比较。

位移运算符

在二进制的基础上对数字进行移动操作。

运算符 描述 示例 结果
<< 按位左移运算符。 9 << 2 36
>> 按位右移运算符。 9 >> 2 2
>>> 按位无符号右移运算符。 -9 >>> 2 1073741821

二进制位运算符

二进制运算符将操作数作为32个二进制位(0或1)的集合,并返回标准的JavaScript数值。

运算符 描述 示例 结果
& 二进制位与(AND)。 14 & 9 8
| 二进制位或(OR)。 14 | 9 15
^ 二进制位异或(XOR)。 14 ^ 9 7
~ 二进制位非(NOT)。 ~9 -10

二元逻辑运算符

运算符 描述 示例 结果
&& 逻辑与。 var a = true, b = false; a && b false
|| 逻辑或。 var a = true, b = false; a || b true

三元条件运算符

condition ? ifTrue : ifFalse

根据条件(condition)判断,如果为true则执行?后面的代码,如果为false则执行:后面的代码

var a = 99 > 100 ? 'foo' : 'bar';
var b = 99 < 100 ? 'foo' : 'bar';

console.log(a, b); // bar foo

赋值运算符

运算符 描述 示例 变量a的结果
= 赋值运算符 var a = true; true
*= 赋值乘积 var a = 5; a *= 4; 20
/= 赋值商 var a = 30; a /= 6; 5
%= 赋值求余 var a = 32; a %= 3; 2
+= 赋值求和 var a = 2; a += 3; 5
-= 赋值求差 var a = 3; a -= 2; 1
<<= 赋值左位移 var a = 5; a <<= 2; 20
>>= 赋值右位移 var a = 5; a >>= 2; 1
>>>= 赋值无符号右位移 var a = 5; a >>>= 2; 1
&= 赋值与 var a = 5; a &= 2; 0
^= 赋值按位异或 var = 5; a ^= 2; 7
= 赋值或 var = 5; a |= 2; 7

逗号操作符

逗号操作符允许在一个判断状态中有多个表达式去进行运算并且最后返回最后一个表达式的值。

var x = 1;
x = (x++, x); 
console.log(x); // 2
var x = (2, 3);
console.log(x); // 3
var a = 1, b = 2, c = 3;