按位非运算符~

~a.indexOf(b)

:::success 判断数组中是否包含某值时,a.indexOf(b) !== -1 可以简写为 ~a.indexOf(b) ::: 按位非运算符 ~ 既是将操作数中的0转为1,1转为0. 所以简单说 ~运算符就是将数值取反后减一
如~5 等于-6,~-7 等于6,也就是~-1等于 0

~~4.6 // 4

:::success 使用 双重按位非运算符可以用来替代 Math.floor() :::

短路计算

逻辑中断:当有多个表达式,左边表达式可以确定结果时,就不再往后继续解析 本例使用 [1,2]

&&
逻辑与:当左边表达式为假时,不会解析后面的表达式
arr[1] === 2 && arr.push(3)
相当于 if (arr[1] === 2) {arr.push(3)}
常用于变量赋值,const data = res && res.data // 因为当res不存在时,undefined.data会发生报错
||
逻辑或:当左边表达式为真时,不会解析后面的表达式
arr[2] || arr.push(3)
相当于 if (arr[2] === undefined) {arr.push(3)}
常用于变量赋值, const data = arg || 1 // 表示如果arg不存在时,那么就给变量赋值为1 ,可以用来赋值默认值。
??
空值合并操作符:当左侧操作符为 null 和 undefined时,才会解析后面的操作符
arr[2] ?? arr.push(3)
相当于 if (arr[2] === undefined) {arr.push(3)} :::warning 使用 && || 时 可能会因为 值为 0 ‘’ 等值造成意想不到的结果 ::: ?.
可选链操作符:当连接对象的引用是null和undefined时,并不会报错,是一种简化写法
上例中的 const data = res && res.data 可以简化为 const data = res?.data

十进制指数

1e5 // 100000

:::success 当需要写数字带有很多零时,可以采用指数来代替这个数字;比如100000 可以写为1e5 :::

默认参数值

  1. function obj (a, b, c) {
  2. if (b === undefined) b = 3
  3. if (c === undefined) c = 4
  4. return a+b+c
  5. }
  6. // 可以简写为
  7. const obj = (a, b = 3, c = 4) => a+b+c