运算法优先级

166 阅读2分钟

优先级

运算符的优先级决定了表达式中运算执行的先后顺序,优先级高的运算符最先被执行.

关联性

关联性决定了相同优先级的运算符的执行顺序.

a OP b OP c
  • 左关联: (a OP b) OP c
  • 右关联: a OP (b OP c)

运算符

以下运算符按优先级从高到低排列

  • 圆括号():( a + b )没有关联性
  • 成员访问.:a.b.c左关联;成员访问[]:a[b][c]左关联;可选成员访问?.:a?.b?.c左关联;函数调用:a()左关联;new操作符:new a(args)没有关联性
  • new操作符:new a()没有关联性
  • 后置递增++: a++没有关联性; 后置递减--: a--没有关联性
  • 逻辑非!:!!a右关联;按位非~:~~a右关联;一元加法+:+a右关联;一元减法-:-a右关联;前置递增++:++a右关联;前置递减--:--a右关联;typeof:typeof typeof a右关联;void: void a右关联;delete:delete a.b右关联;await:await a()右关联
  • 幂**:a ** b ** c右关联
  • 乘法*:a * b * c左关联;除法/:a/b/c左关联;取模%:a%b%c左关联
  • 加法+: a + b + c左关联;减法-:a - b - c左关联
  • 按位左移<<:a << b << c左关联;按位右移>>:a >> b >> c左关联;无符号右移>>>: a >>> b >>> c左关联
  • 小于等于<=:a <= b <= c左关联;小于<:a < b < c左关联;大于等于>=: a >= b >= c左关联;大于>: a > b > c左关联;in: a in b in c左关联;instanceof:a instanceof b instanceof c左关联
  • 等于==: a == b == c左关联;不等于!=:a != b != c左关联;全等===:a === b === c左关联;不全等!==: a !== b !== c左关联
  • 按位与&: a & b & c左关联
  • 按位异或^:a ^ b ^ c左关联
  • 按位或|:a | b | c左关联
  • 逻辑与&&: a && b && c左关联
  • 逻辑或||: a || b || c左关联
  • 空值合并??: a ?? b ?? c左关联
  • 条件运算符?:: a ? b : c ? d : e右关联
  • 赋值运算符均为右关联 = :a = b = c;+=: a+=b;-=:a-=b;**=:a**=b;*=:a*=b;/=:a/=b;%=:a%=b;<<=:a<<=b;>>=:a>>=b;>>>=:a>>>=b;&=:a&=b;^=:a^=b;|=:a|=b;&&=:a&&=b;||=:a||=b;??=:a??=b
  • yied:yield a右关联;yield*:yield* a()右关联
  • 展开运算符...:...a没有关联性
  • 逗号,:a,b左关联