
在JavaScript中,?. 是可选链(Optional Chaining)操作符的语法。这个操作符允许你安全地访问深层嵌套的属性而不必显式验证每一级是否存在,从而避免运行时错误。如果引用链中的某个部分是 null 或 undefined,表达式短路返回 undefined 而不是抛出错误。
基本用法
假设有一个可能未定义的对象结构:
const user = { name: 'Alice', address: { city: 'Wonderland' } };如果你想要访问一个深层的属性,比如 user.profile.email,但不确定 profile 对象是否存在,你可以使用可选链:
console.log(user.profile?.email); // 输出: undefined,而不是抛出 TypeError应用场景
- 访问深层嵌套对象:当你需要从一个可能不完整或未定义的嵌套对象中读取数据时。
- 函数调用:也可以用于调用可能不存在的函数。
- 数组元素访问:访问数组中可能不存在的索引位置。
示例
访问深层嵌套属性
const data = { a: { b: { c: 42 } } }; console.log(data.a?.b?.c); // 输出: 42 console.log(data.x?.y?.z); // 输出: undefined函数调用
function foo() { return { bar: () => console.log('bar called') }; } const obj = foo(); obj?.bar?.(); // 输出: "bar called" (foo()?.baz || (() => {})).(); // 不会报错,因为 baz 不存在时返回空函数并执行它数组元素访问
const arr = [1, 2, 3]; console.log(arr[2]?.toString()); // 输出: "3" console.log(arr[5]?.toString()); // 输出: undefined注意事项
- 可选链不会阻止所有类型的错误,例如类型错误(TypeError)以外的其他错误。
- 使用可选链可以简化代码,提高可读性,但也要小心滥用导致逻辑上的疏漏。
通过可选链操作符,JavaScript 提供了一种更加简洁和安全的方式来处理可能为 null 或 undefined 的值,从而减少了显式的条件检查。
