js中?.、??、??=的用法和含义

参考链接1
参考链接2

可选链运算符(?.)

可选链运算符(?.)类似于链式运算符(.),不同之处在于在引用为null或undefined时不会报错,而是短路返回undefined

let a;
let b = {name:'xxx'}
let c = [1,2,3]
let d = a?.name; // undefined
d = b?.name; // 'xxx'
d = b?.['name']; // 'xxx'
d = c?.[0]; // 1

let d = a?.name;举例,意思是只有当a存在,且a有name这个属性时,才会把a.name的值赋给d,否则会给d赋值undefined,且不会报错

let a = {
	getName:()=>{
		return '123'
	}
}
let result1 = a?.getName?.(); // 123
let result2 = a?.setName?.(); // undefined

与函数调用一起使用时,如果给定的函数不存在,则返回undefined,不会报错

注意: 如果被当作方法调用的是一个属性,使用?.还是会报错

空值合并运算符(??)

let a = null;
let b = 1;
let c = a ?? b; // 1

意思是只有当??左侧为null或undefined时,才会返回右侧的值,否则返回左侧值

常用空值合并运算符给常量赋默认值,保证其不会null或undefined

给变量赋默认值,常用逻辑或运算符(||),逻辑或运算符是一个布尔逻辑运算符,左侧会被强制转换成布尔值,任何的假值(0,‘’,NaN,null,undefined)都不会被返回

注意: ??不能和&&、||组合使用,因为空值合并运算符和其他逻辑运算符之间的运算优先级是未定的,会报错,可使用()来显式表明运算优先级

空值赋值运算符(??=)

let a;
let b = '123';
let c = 'qwer'
a ??= b;// '123'
b ??= c;// '123'

意思是只有当??=左侧的值为undefined、null时,才会把右侧的值赋给左侧,否则左侧不会被赋值

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值