我们都遇到以下情况:PersonModel
我想知道如果我们也因为TypeError: Cannot read property 'name' of undefined
这样的情况而得到undefined
是不正常的!除了obj.undefinedProp.name
以外,还可以吗?
这种类型的支票经常使用:
undefined
由于上述错误,我们不能为以下内容做同样的事情:
if (!obj.undefinedProp) return;
我们首先需要检查父道具是否已定义:
if (!obj.undefinedProp.name) return;
因此,问题是:希望有一个if (!obj.undefinedProp || (obj.undefinedProp && !obj.undefinedProp.name)) return;
我什至不知道是否可能的解决方案是错误的吗……
答案 0 :(得分:0)
optional chaining operator是现代JavaScript的一部分,允许您编写:
if (!obj.undefinedProp?.name) return;
如果需要支持尚不具备此功能的JavaScript环境,则可以使用Babel之类的编译器。
(将此设置为默认值会将很多错误转换为无声的错误值,这是不希望的。)
请注意
我们首先需要检查父道具是否已定义:
if (!obj.undefinedProp || (obj.undefinedProp && !obj.undefinedProp.name)) return;
具有多余的部分,可以写成
if (!obj.undefinedProp || !obj.undefinedProp.name) return;
因为逻辑或运算符是short-circuiting – obj.undefinedProp && !obj.undefinedProp.name
将依赖相同的行为。