gpt4 book ai didi

javascript - 对象的非空逻辑检查

转载 作者:行者123 更新时间:2023-12-02 21:36:58 25 4
gpt4 key购买 nike

使用 nullish 运算符重构此逻辑的正确/最佳方法是什么? -

if (value !== undefined && value !== null && typeof value !== 'object') {
// error, when not null/undefined, it must be an object
}

更新

到目前为止,我已经尝试过这个,虽然看起来有点奇怪,但似乎有效:

if (typeof (value ?? null) !== 'object') {
// error...
}

这是否是一个适当的等价物?

附注我写的是 TypeScript,所以浏览器兼容性与我无关。

最佳答案

尽管您现有的实现示例可以工作,但 JavaScript 的 typeof 函数长期以来在 typeof(null) 返回 'object' 的情况下会造成困惑。重构代码时最重要的考虑因素之一始终是代码的可维护性,任何可能的困惑来源都可能会降低可维护性。

如果有人现在查看此代码,特别是任何没有 JavaScript 经验或从未遇到过 typeof(null) 怪癖的开发人员,他们会认为您的代码正在寻找所有非对象类型,包括 nullundefined 的值,而不是排除它们。

此外,尽管当前的 JavaScript 标准不太可能更改 typeof(null) 的行为以避免破坏现有代码,但不能绝对保证此行为永远不会改变。尤其不能保证 TypeScript 本身不会改变这种行为,使其更加直观,并转编译为不同的 JavaScript 等效项。

如果您修改空合并操作的默认回退值,则可以更好地避免代码困惑以及 future 可能破坏兼容性的更新。具体来说,默认为 {},它始终保证被解释为对象,并且不太可能受到 JavaScript 或 TypeScript 中的重大更改的影响:

if (typeof (value ?? {}) !== 'object') {
// error...
}

关于javascript - 对象的非空逻辑检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60470935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com