Skip to content

JavaScript 运算符

算数运算符

Arithmetic Operators

运算符说明例子
+左右都是数值类型时:加法运算
左右包含布尔值类型时:加法运算
左右包含字符串类型时:字符串拼接
10 + 2
10 + true + false
10 + "10" + " "
-减法运算10 - 2
*乘法运算10 * 2
/除法运算10 / 2
**幂运算10 ** 2
%取余运算10 % 2
++自加一运算a ++ ( a + 1 )
--自减一运算a -- ( a - 1 )

赋值运算符

Assignment Operators

运算符说明例子
=赋值操作
将右侧值直接赋值给左侧变量
a = b
+=加等于操作
将左侧变量当前值加上右侧值再后赋值给左侧变量
a += b ( a = a + b )
-=减等于操作
将左侧变量当前值减去右侧值再后赋值给左侧变量
a -= b ( a = a - b )
*=乘等于操作
将左侧变量当前值乘以右侧值再后赋值给左侧变量
a *= b ( a = a * b )
/=除等于操作
将左侧变量当前值除以右侧值再后赋值给左侧变量
a /= b ( a = a / b )

比较运算符

Comparison Operators

比较运算的结果是一个布尔值 ( truefalse )

运算符说明例子
>左侧大于右侧a > b
<左侧小于右侧a < b
>=左侧大于等于右侧a >= b
<=左侧小于等于右侧a <= b
==左侧等于右侧a == b
===左侧完全等于右侧 ( 严格等于 )a === b
!=左侧不等于右侧a != b
!==左侧完全不等于右侧 ( 严格不等于 )a !== b

== vs ===!= vs !==

  • ==!=比较的是左右两侧数据在类型转换后的值
  • ===!==比较的是左右两侧数据的值以及数据类型
js
console.log(1 == "1", 1 === "1");     // true false
console.log(true == 1, true === 1);   // true false
console.log(false == 0, false === 0); // true false

console.log(1 != "1", 1 !== "1");     // false true
console.log(true != 1, true !== 1);   // false true
console.log(false != 0, false !== 0); // false true

逻辑运算符

Logical Operators

运算符说明例子
&&与运算a = b && c
||或运算a = b || c
!非运算a = !b
js
console.log(true && true);      // true
console.log(true && false);     // false
console.log(false && true);     // false
console.log(true && "xxx");     // "xxx"
console.log(false && "xxx");    // false

console.log(true || true);      // true
console.log(true || false);     // true
console.log(false || true);     // true
console.log(true || "xxx");     // true
console.log(false || "xxx");    // "xxx"

console.log(!true, !false);     // false true
console.log(![], !![]);         // false true

三目运算符

Ternary Operator / Conditional Operator

运算符说明例子
? :用于基于判断条件返回一个对应的值条件 ? value1 : value2

展开运算符

Spread Operator

运算符说明
...可以展开数组、键值对对象中的成员,可灵活用于数组、键值对对象的合并
js
// 展开数组,将各个元素作为多个参数传递给函数
函数(...[参数1, 参数2, 参数3]);
js
// 合并数组
let 新数组 = [...数组1, ...数组2];

// 合并键值对对象
let 新键值对对象 = { ...键值对对象1, ...键值对对象1 };

合并键值对对象时的注意点

  • 创建的新对象是浅拷贝源对象
  • 同名键值对会被覆盖

可选链运算符

Optional Chaining Operator

运算符说明
?.可以安全的访问对象的属性、数组的元素、调用函数
当左侧数据为空值 ( undefinednull ) 时不会报错而是直接短路返回undefined
js
键值对对象?.键;
键值对对象?.["键"];
数组?.[索引];
函数?.();

可以优化链式调用

js
const name = (message && message.user && message.user.name) || "默认名字"; 
const name = message?.user?.name || "默认名字";                            

空值合并运算符

Nullish Coalescing Operator

运算符说明
??当左侧数据为空值 ( undefinednull ) 时返回右侧数据,否则直接返回左侧数据
js
const a = 100;
const b = null;

console.log(a ?? "xxx");    // 100
console.log(b ?? "xxx");    // "xxx"