javascript中的可选链操作符

可选链操作符?.可以安全的访问对象中嵌套的属性,即时属性不存在也不会报错

常规情况下,如果我们访问不存在的属性会报错

let user = {}; // a user without "address" property

alert(user.address.street); // Error!

如果确实想访问属性怎么办,可以使用三元表达式

let user = {};

alert(user.address ? user.address.street : undefined);

但是如果属性嵌套比较深,三元表达式将变得难以理解

let user = {}; // user has no address

alert(user.address ? user.address.street ? user.address.street.name : null : null);

为此我们可以使用短路运算符&&来优化

let user = {}; // user has no address

alert( user.address && user.address.street && user.address.street.name ); // undefined (no error)

为了简洁,用可选链语法

let user = {}; // user has no address

alert( user?.address?.street ); // undefined (no error)

如果属性存在正常返回值,如果属性不存在就返回undefined

除了用在属性上,可选链还可以用来调用不存在的方法

let userAdmin = {
  admin() {
    alert("I am admin");
  }
};

let userGuest = {};

userAdmin.admin?.(); // I am admin

userGuest.admin?.(); // nothing (no such method)

也可以用在删除属性上

delete user?.name; // delete user.name if user exists

但是不能用在赋值语句上

let user = null;

user?.name = "John"; // Error, doesn't work
// because it evaluates to undefined = "John"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

低代码布道师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值