1、运算符优先级,从 低到高

  1. 逗号 运算符
  2. 扩展 运算符
  3. yield关键字 运算符(yield,yield*)
  4. 赋值 运算符
  5. 三元 运算符
  6. 其它二元 运算符(二元关键字运算符在末位)
  7. 其它一元 运算符(一元关键字运算符在末位)
  8. 函数相关 运算类型
    new(无参数列表): new ...() 。
    函数调用: ...(...) 。
    可选链 运算符: ?. ,这个无关函数运算类型,因为优先级, 故插入在此 。
    new(有参数列表): new ...(...) 。
  9. 需计算的成员访问 运算符 …[…]
  10. 不需计算的成员访问 运算符 … . …
  11. 圆括号 运算符 (…)

常用运算符优先级,从 低到高

  1. 赋值 运算符
  2. 三元 运算符
  3. 非一元逻辑 运算符
  4. 等号比较 ...
  5. 大小比较 ... 和 从属关系 ...(运算符非符号)
  6. 加减 ...
  7. 乘除 ...
  8. 一元 ...
  9. 前置一元 ...(部分运算符非符号)
  10. 后置一元 ...
  11. 成员访问 ...
  12. 圆括号 ...

( 上面1-7 都不是一元运算符。从属关系运算符类别,包括 in 和 instanceof两个运算符。)


2、相同优先级运算符的
执行顺序取决于关联性,关联性分三种情况:

  • 右关联的(从右往左执行)(右结合)

主要的是:= 和 ?:

w = x = y = z;
q = a ? b : c ? d : e ? f : g;

等价于

w = (x = (y = z));
q = a ? b : (c ? d : (e ? f : g));
  • 左关联的
  • 无关联的

3、运算符优先级的两端

逗号运算符(最低) <---> 圆括号运算符(最高)


(备注:文中 "..." 代指运算符。)

如果需要了解具体每一个JS运算符的优先级,可以参看 https://developer.mozilla.org...


小妖孽
1 声望0 粉丝

个人简介: