?. 、 ?? 、??= 以及&& 、|| 、!
今天看到这种写法,好奇的百度了下,做下相关的记录
?. ---可选链
a=b?.name
//等价于
if(!!b){
a = b.name;
}else{
a = undefined;
}
//判断b是否存在(null、undefined的除外),
//存在的话 b.name赋值给a,
//否则(当b 为null、undefined时), undefined直接赋值给a
?? ---空值合并运算符
?? 有点类似于 || 或运算符
他们的不同之处在于 ?? 只会判断 null undefined
|| 把数字0也算进false里面了
a=b??c
等价于
if(!!b||b===0){
a=b
}else{
a=c
}
??= 空值赋值运算符
当??=左侧的值为null、undefined的时候,才会将右侧变量的值赋值给左侧变量
let b = '张三';
let a = 0
let c = null;
let d = '李四'
a??=b // 0
c??=d //李四
&& 、|| 、! 且或非运算符
&& 是当&&左侧判断为true时 才会走到&&右侧
|| 是当&&左侧判断为false时 才会走到&&右侧
! 是当前的属性 进行布尔值取反操作
它们相对上面的运算符 他们会把0 ,NAN 算到false里面
&& 且
let a
let b='zhangsan'
let c='lisi'
a=b&&c //lisi
let e
let d=undefined
e=d&&c //undefined
|| 或
let a
let b='zhangsan'
let c='lisi'
a=b||c //zhangsan
let e
let d=undefined
e=d||c //lisi
! 非
let a
let b='zhangsan'
!a //true
!b //false
!!b //true