0

我正在尝试编写最短的可读代码来访问我没有任何信息的变量的属性,但我希望此属性访问是安全的:

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
  1. x如果是null或可能会抛出undefined
  2. 会很完美,但我不能使用可选链接(由于某种原因超出了这个问题的范围)
  3. Works & 被 lodash 和 coffeescript 等其他库用来以空安全的方式访问道具,但读起来很难看
  4. 我想使用它,但是如果 JS 中存在不允许您访问其属性的真实内容,这将失败 - 这甚至会发生吗?我能想到的只是nulland undefined,但也许存在一个奇异的 JS 值,它既真实又抛出属性访问
4

1 回答 1

1

如果 JS 中存在不允许您访问其属性的真实内容,这将失败 - 这甚至会发生吗?

它可以,但它会很奇怪 - 就像一个可能抛出的吸气剂:

const obj = {
  get prop() {
    throw new Error();
  }
};

console.log(obj.prop);

或具有相同功能的代理。

但是同样的方法会导致每个方法都抛出 - 全部 1、2、3 和 4;我认为,在普通代码中不值得担心太奇怪了。

如果是我,我会重新检查(2),看看是否有可能改变你的构建过程来集成可选链。否则,您将不得不在 (3) 和 (4) 之间进行选择。

于 2021-02-18T16:41:06.760 回答