- !!val // 等价于 Boolean(val)
- 逻辑与
if (val) {
myFunction()
}
val && myFunction()
赋值:
val && (a = 1)
- 逻辑或
if (val) {
myFunction()
}
!val || myFunction()
if (val){
a = val
}else {
a = 'xxx'
}
a = val || 'xxx'
- ?? 空值合并/空判断 (node不支持)
// ??前面时null或者undefined,取后面的默认值
a = val ?? 'default'
应用
if (val !== null && val !== undefined && val !== '') {
console.log('hello')
// ...
}
if ((val ?? '') !== '') {
console.log('hello')
}
-
?. null 传导符(或链判断操作符) (node不支持)
- obj?.prop 对象属性
- obj?.[expr] 对象属性(数组也可如此使用)
- func?.(...args) 函数的调用或对象方法的调用
-
扩展运算符和剩余运算符
onst { id, ...other } = { id: '001', age: 18, name: 'Tom' }
const arr = [1, 2]
[0, ...arr] // [0, 1,2]
-
展开运算符 展开运算符的常见作用大致分为:
- 展开数组:展开运算符(…)会把数组中各项展开显示。
- 拼接数组:展开运算符还可以用来拼接两个数组,把各项元素连接到一起,形成一个新数组。(可以在数组任意位置拼接)
- 拷贝数组:执行的都是浅拷贝(只遍历一层)。
- 在函数中使用:展开运算符可以运用在函数参数中。
- 构造字面量对象:展开运算符在对对象使用时,应当注意以{}包裹起来。
const obj = {
a: 1,
b:2,
c:3
}
const {a,b,c} = obj
console.log(a,b,c)
//-----------------
const obj = {
a: 1,
b:2,
c:3
}
const obj2 = {
a: 1,
b:2,
d:4
}
const obj3 = {...obj,...obj2}
console.log (obj3)
-
三元运算符
-
连等赋值操作
这个操作我们也能经常看见,但我自己并不常用
let a,b
a = b = 1
a // 1
b // 1
以上代码等价于
let a,b
b = 1
a = b