按位非运算符~
~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 :::
默认参数值
function obj (a, b, c) {
if (b === undefined) b = 3
if (c === undefined) c = 4
return a+b+c
}
// 可以简写为
const obj = (a, b = 3, c = 4) => a+b+c