javascript可选操作符 (?.)

?. 语法在ES2020 中被引入,用法如下:

obj.val?.pro  // 如果`val`存在,则返回`obj.val.prop`,否则返回 `undefined`。		
obj.func?.(args) // 如果 obj.func 存在,则返回 `obj.func?.(args)`,否则返回 `undefined`。
obj.arr?.[index] // 如果 obj.arr 存在,则返回 `obj.arr?.[index]`,否则返回 `undefined`。

obj?.data?.list 等于 obj && obj.data && obj.data.list

//假设我们有一个对象

let People = {
	other:{
		like:'code'
	},
	name:'cc',
	age:100,
	phone:'13888888888',
	getFirstName: function(){
    	return this.name;
  },
  arr:[{job:'写代码'},{job:'维护世界和平'}]  
}
//属性的访问
//访问存在的属性
console.log(People.other.like)
//访问不存在的属性
console.log(People.abc.like); 
// throws error "Uncaught TypeError: Cannot read property 'like' of undefined"

改用 ?. 访问不存在的属性:
console.log(People.abc.like); 
// undefined

//方法的访问
//访问存在的方法:
console.log(user.getFirstName()); 
// 前端小智

//访问不存在的方法:
console.log(user.getLastName()); 
// throws error "Uncaught TypeError: user.getLastName is not a function";

//改用 ?. 访问不存在的方法:
console.log(user.getLastName?.()); 
// "undefined"

//访问存在的数组:
console.log(user.arr[0].job); 
// "敲代码"

//访问不存在的数组:
console.log(user.arr[3].job); 
// throws error "Uncaught TypeError: Cannot read property 'name' of undefined"

改用 ?. 访问不存在的数组:
console.log(user.arr?.[0]?.name); 
// "undefined"


?? 操作符
我们知道 ?. 操作符号如果对象不存在,刚返回 undefined,开发中可能不返回 undefined 而是返回一个默认值,这时我们可以使用双问题 ?? 操作符。

const like= user.abc?.like;
console.log(like);
// undefined

const like= user.abc?.like?? "敲代码";
console.log(like);
// 敲代码

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值