javascript中的可选链操作符

Posted 低代码布道师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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"

以上是关于javascript中的可选链操作符的主要内容,如果未能解决你的问题,请参考以下文章

ES11中的可选链等语法

JavaScript中的可选链接[重复]

Swift的可选链,类型转换和扩展

空值合并运算符和可选链

空值合并运算符和可选链

JavaScript进阶(十三)JavaScript 空值合并运算符可选链操作符空值赋值运算符讲解