问题描述
我正在尝试编写最短的可读代码来访问我没有任何信息的变量的属性,但我希望此属性访问是安全的:
const x = getXSomehow();
const y = x.z; // 1
const y = x?.z; // 2
const y = x != null && x.z; // 3
const y = x && x.z; // 4
- 如果
x
是null
或undefined
可能会抛出 - 会很完美,但我不能使用可选链接(出于某种原因超出了这个问题的范围)
- Works & 被其他库(如 lodash 和 coffeescript)用于以 null 安全的方式访问 props,但读起来很难看
- 我想使用它,但是如果 JS 中存在一些不允许您访问其属性的真实内容,这将失败 - 这甚至会发生吗?我能想到的只有
null
和undefined
,但也许存在一个既真实又抛出属性访问的奇异 JS 值
解决方法
如果 JS 中存在一些不允许您访问其属性的真实内容,这将失败 - 这甚至会发生吗?
它可以,但它会很奇怪 - 就像一个可能会抛出的吸气剂:
const obj = {
get prop() {
throw new Error();
}
};
console.log(obj.prop);
或者具有相同功能的代理。
但是同样的方法会导致每个方法都抛出 - 1、2、3 和 4;我觉得在普通代码中这太奇怪了,不值得担心。
如果是我,我会重新检查 (2) 以查看是否有可能更改您的构建过程以集成可选链接。否则,您将不得不在 (3) 和 (4) 之间做出选择。