?. 、 ?? 、??= 以及&& 、|| 、!

image

今天看到这种写法,好奇的百度了下,做下相关的记录

?. ---可选链

	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
posted @ 2022-02-15 16:26  xiao旭  阅读(324)  评论(0编辑  收藏  举报