Optional-Chaining 可选链
- 安全访问深层嵌套的对象
- 当对象结构较深且某些层级可能缺失时,可选链可以避免 TypeError
基本语法
- 可选链使用
?.
运算符表示,可以链式地访问对象的属性或调用方法
object?.property;
array?.[index];
object?.method();
示例
- 对象
let user = {
name: "Alice",
address: {
city: "New York"
}
};
// 访问地址的 city
logd(user.address?.city); // 输出: New York
user = {}
// 如果 address 不存在,则返回 undefined
logd(user?.address?.city); // 输出: undefined
// 如果不用 ?. 则返回报错
logd(user.address.city); // 报错: TypeError: 无法读取 undefined 的属性 “city”
- 数组
let list = [{name: "Item1"}];
logd(list?.[0]?.name); // 输出: Item1
logd(list?.[10]?.name); // 输出: undefined
- 函数
let api = {
fetchData: () => "Data fetched"
};
logd(api?.fetchData()) // 输出: "Data fetched"
let brokenApi = null;
logd(brokenApi?.fetchData()) // 输出: undefined
替代try/catch
- 如EasyClick中,查找节点或图片时,如果找不到,经常会报错,并引起脚本停止和崩溃
let node = text("节点").getOneNodeInfo(0)
node.click()
logd("执行后续代码")
// 输出: TypeError: 无法调用 null 的方法 “click”
// 脚本停止运行
- 可改为
text("节点").getOneNodeInfo(0)?.click()