跳到主要内容

JS 运算符

JavaScript 运算符介绍

  • 算术运算符

    • +
    • -
    • *
    • /
    • % 取余
    • ** 幂运算
    • ++ 自增
    • -- 自减
  • 赋值运算符

    • = 赋值
    • += 加后赋值
    • -= 减后赋值
    • *= 乘后赋值
    • /= 除后赋值
    • %= 取余后赋值
  • 比较运算符

    • == 等于(自动类型转换)
    • === 全等(值和类型都相等)
    • != 不等
    • !== 全不等
    • > 大于
    • < 小于
    • >= 大于等于
    • <= 小于等于
  • 逻辑运算符

    • &&
    • ||
    • !
  • 位运算符(较少用)

    • & 按位与
    • | 按位或
    • ^ 按位异或
    • ~ 按位取反
    • << 左移
    • >> 右移
    • >>> 无符号右移
  • 三元运算符

    js
    let result = condition ? value1 : value2;
  • 其他常见运算符

    • typeof 判断数据类型
    • instanceof 判断是否属于某个对象类型
    • delete 删除对象属性
    • in 判断属性是否存在
    • ... 展开运算符

JavaScript 运算符优先级

tip

括号成员先,单目幂次连;乘除加减移,关系相等判;按位逻辑推,条件赋值随,逗号最后算。


设计逻辑

  1. 先算“局部”、再算“全局”
    • 成员访问、函数调用 → 最小的“单位”要先确定。
    • 所以 obj.method()[i] 要在加减乘除之前算清楚。
  2. 单目运算比双目运算更紧密
    • !a++atypeof a 这些只作用在一个操作数上的运算,优先级比 a + ba * b 更高。
  3. 幂运算特殊
    • a ** b ** c 采用右结合,与数学里常见的幂运算习惯(幂塔运算)一致。
    • 区别: 2 ** 3 ** 2 右结合等价于 232=29=5122^{3^2}=2^9=512 ;左结合则等价于 (23)2=64(2^3)^2=64
  4. 乘除优先于加减
    • 这是数学规则,编程语言普遍遵守。
  5. 位运算在逻辑之前
    • 先算二进制层面的与或非,再到布尔逻辑层面的与或非。
    • 所以顺序是: &^|&&||
  6. 空值合并(??)比逻辑或更靠后
    • 避免和“假值判定”混淆,必须明确写括号。
    • 例如: a || b ?? c 在 JS 中会报错,必须写成 (a || b) ?? c
  7. 条件(三元)和赋值靠后
    • 它们是“控制流”或者“结果决定”,自然放在最后。
    • a = cond ? b : c → 先算条件,再赋值。
  8. 逗号运算符最低
    • 它只是“顺序执行”,优先级最低,几乎任何地方都得加括号。

规则表

从高到低,数值越小优先级越低

优先级运算符/描述示例
20成员访问函数调用new(带参数)obj.propfunc()new Person(1,2)
19new(无参数)new Person
18后置递增/递减x++x--
17逻辑非按位非一元加/减前置递增/递减typeofvoiddeleteawait!a~a+a-a++xtypeof x
16指数运算符(右结合)a ** b
15乘、除、取余*/%
14加、减+-
13位移<<>>>>>
12关系运算符<<=>>=ininstanceof
11相等运算符==!====!==
10按位与&
9按位异或^
8按位或|
7逻辑与&&
6逻辑或|
5空值合并??
4条件(三元)cond ? a : b
3赋值运算符(右结合)=+=-=*=/=%=**=<<=>>=>>>=&=^=|=&&=|=??=
2yield、yield*yield x
1展开运算符、逗号运算符...argsa, b
拓展
  • 算术、比较、逻辑、位运算符 → 直接映射到 CPU 指令,非常快。
  • 对象/类型相关运算符typeofinstanceofdelete)→ 运行时逻辑,依赖 JS 引擎实现。
  • 高级异步运算符awaityield)→ 不是 CPU 层面的,而是运行时调度(事件循环 / 协程机制)。