简介
ECMAScript 2020 增加了 optional chaining 这个操作符,可以使开发者在访问对象和数组属性时,避免了因为空值或 undefined 导致程序崩溃的问题。本篇文章将介绍如何使用 optional chaining 优化代码。
optional chaining 的语法
ECMAScript 2020 定义了可选链式操作符(optional chaining),可以用来简化访问链的判空操作。
- 当访问对象属性或数组元素时可能会返回 undefined 或 null 值,此时再访问对象属性或数组元素将会抛出错误,导致程序运行失败;
- 可选链式操作符(?.)可以在属性或数组不进行判空判断时不抛出错误,而是直接返回 undefined 值。
// 1. 访问对象属性 obj?.prop; // 2. 访问数组元素 arr?.[index];
optional chaining 的使用
1. 避免崩溃
当访问属性时,如果对象不存在,访问值将会返回 undefined 而不是抛出错误。
let user = null; let name = user?.name; // undefined alert(name); // undefined
2. 可选调用
当对象比较复杂时,联合调用会变得十分复杂,而可选调用则非常方便。
let elem = document.querySelector('#id')?.querySelector('.class');
如果 document.querySelector('#id') 返回 null 或 undefined,则后面的 querySelector 不会执行,elem 的值将是 undefined。
3. 引用链中的可选链
可选链可以用多个问号组合起来,在引用链中使用。
let user = {}; alert( user?.address?.street ); // undefined(user.address 不存在)
上面示例中,user 对象没有 address 属性,因此查询 user?.address 不会产生错误,他会返回 undefined 并停止执行。
示例代码
下面是一个使用 optional chaining 的示例代码:
const user = { name: 'Tom', email: 'tom@example.com', address: { city: 'Beijing', street: 'Xinjiekou', postcode: '10000' } }; const userInfo = { name: user?.name, email: user?.email, address: user?.address?.city && user?.address?.street && user?.address?.postcode ? `${user?.address?.city} ${user?.address?.street} ${user?.address?.postcode}` : '' };
在上面的代码中,我们使用了 optional chaining 进行判断 user 对象的属性是否存在,从而避免了因为空值或 undefined 导致程序崩溃的问题。
总结
在本篇文章中,我们介绍了如何使用 ECMAScript 2020 中的 optional chaining 优化代码,并提供了详细的语法及示例代码。使用 optional chaining 可以让我们更加方便和安全地访问对象和数组属性。在开发过程中,建议我们使用 optional chaining 进行代码优化,提高程序的健壮性和安全性。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65b31538add4f0e0ffc2647a