跳到主要内容

运算符

一元运算符如何改变值?​

  • 自增自减: ++x/--x 先运算再返回, x++/x-- 先返回再运算;
let num1 = 29;
const num2 = --num1 + 2; // 30; num1 先减为 28
const num3 = num1-- + 2; // 30; 先用 28 参与运算, 之后 num1 变为 27
  • 一元正负: +x 等价于 Number(x), -x 等价于 -Number(x);

位运算符如何按位运算?​

运算符含义说明
~按位非逐位取反
&按位与两位都为 1 才为 1
|按位或任一位为 1 即为 1
^按位异或两位不同才为 1
<<左移保留符号位
>>右移保留符号位
>>>无符号右移不保留符号位, 负数结果差距大

算术运算符有哪些?​

34 * 56; // 乘
66 / 11; // 除
26 % 5; // 取余
3 ** 2; // 幂, 等价于 Math.pow(3, 2)
1 + 2; // 加
2 - 1; // 减

关系与判等运算符有哪些?​

运算符机制
> >=左操作数大于/大于等于右操作数时返回 true
< <=左操作数小于/小于等于右操作数时返回 true
== !=转换后比较, 相等/不等返回 true
=== !==不转换, 值与类型同时相同/不同才返回 true

逻辑运算符与空值合并如何选值?​

运算符机制应用
!expr转布尔后取反!!x 等价于 Boolean(x)
expr1 && expr2若 expr1 为真返回 expr2, 否则返回 expr1守卫式取值
expr1 || expr2若 expr1 为假返回 expr2, 否则返回 expr1兜底默认值
expr1 ?? expr2返回第一个不是 null/undefined 的值只兜底空值
  • 短路: false && anything 不计算 anything, true || anything 同样短路;
  • || 与 ?? 的差别: || 会把 false、0、"" 当成需要兜底的值, ?? 只在空值时兜底;
const height = 0;
height || 100; // 100
height ?? 100; // 0
  • 混用限制: ?? 不能与 &&、|| 直接混写, 需要加括号;

条件、赋值与逗号运算符如何使用?​

const result = condition ? trueValue : falseValue; // 条件运算符
let x = 1;
x += 2; // 等同于 x = x + 2
const num = (5, 1, 4, 8, 0); // 逗号运算符返回最后一个操作数的值
简写含义简写含义
x += fx = x + fx <<= fx = x << f
x -= fx = x - fx >>= fx = x >> f
x *= fx = x * fx >>>= fx = x >>> f
x /= fx = x / fx **= fx = x ** f
x %= fx = x % f