var i = 0
var a = i++
console.log(a,i) // => a=0;i=1;
a = ++i
console.log(a,i) // => a=2;i=2;关联性决定了拥有相同优先级的运算符的执行顺序 左关联(左到右)相当于把左边的子表达式加上小括号(a OP b) OP c 右关联(右到左)相当于a OP (b OP c),赋值运算符是典型右关联的
- 21 圆括号
- 20 面向对象与函数相关
- 19 无参数new (new F)
- 18 后置加减
- 17 前置加减 & 逻辑非(!n) & tvda
- 16 幂
- 15 乘除摸
- 14 加减法
- 12 大小判断 & instanceof
- 11 相等判断
- 7 &&
- 6 ||
- 4 ? :
- 3 赋值
- 1 展开运算符
- 0 逗号
- 同级运算按从左到右运算
- *常用
| 优先级 | 运算类型 | 运算符 |
|---|---|---|
| 21 | *圆括号 | (…) |
| 20 | *成员访问 | … . … |
| 20 | *需计算的成员访问(中括号) | …[…] |
| 20 | *new (带参数列表) | new…(…) |
| 20 | *函数调用 | …(…) |
| 20 | *可选链(Optional chaining) | ?. |
| 19 | *new (无参数列表) | new … |
| 18 | *后置递增(运算符在后) | …++ |
| 18 | *后置递减(运算符在后) | …-- |
| 17 | *逻辑非 | ! … |
| 17 | *按位非 | ~ … |
| 17 | *一元加法 | + … |
| 17 | *一元减法 | - … |
| 17 | *前置递增 | ++ … |
| 17 | *前置递减 | -- … |
| 17 | *typeof | typeof … |
| 17 | *void | void … |
| 17 | *delete | delete … |
| 17 | *await | await … |
| 16 | *幂 | … ** … |
| 15 | *乘法 | … * … |
| 15 | *除法 | … / … |
| 15 | *取模 | … % … |
| 14 | *加法 | … + … |
| 14 | *减法 | … - … |
| 13 | 按位左移 | … << … |
| 13 | 按位右移 | … >> … |
| 13 | 无符号右移 | … >>> … |
| 12 | *小于 | … < … |
| 12 | *小于等于 | … <= … |
| 12 | *大于 | … > … |
| 12 | *大于等于 | … >= … |
| 12 | *in | … in … |
| 12 | *instanceof | … instanceof … |
| 11 | *等号 | … == … |
| 11 | *非等号 | … != … |
| 11 | *全等号 | … === … |
| 11 | *非全等号 | … !== … |
| 10 | *按位与 | … & … |
| 9 | *按位异或 | … ^ … |
| 8 | *按位或 | … | … |
| 7 | *逻辑与 | … && … |
| 6 | *逻辑或 | … || … |
| 5 | 空值合并 | … ?? … |
| 4 | *条件运算 | … ? … : … |
| 3 | *赋值 | …=…, …+=…, …-=…, …*=… , …\=… |
| 2 | yield | yield… |
| 2 | yield* | yield*… |
| 1 | *展开运算符 | ... … |
| 0 | *逗号 | …,… |
引用类型间的相等判断(无论是==还是===)是比较引用地址
var a = [1,2]
var b = a
a === b // true
a == b // true
var c = [1,2]
var d = [1,2]
c === d // false
c == d // false引用类型间比较大小是按照字典序比较,就是先比第一项谁大,相同再去比第二项
var a = [1, 2, 3],
b = [1, 2, 4]
a > b //false
a < b //true