修复TypeError:无法读取未定义的属性“名称”

时间:2020-09-29 00:14:31

标签: javascript

我们都遇到以下情况: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; 我什至不知道是否可能的解决方案是错误的吗……

1 个答案:

答案 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-circuitingobj.undefinedProp && !obj.undefinedProp.name将依赖相同的行为。