从 Javascript 中的对象安全提取 属性
Safely extracting property from object in Javascript
我有这个功能:
const someVar = someOtherVar.pipe(
// filter((data) => data && !data.loading) // Works
filter(({ loading }) => !loading), // Doesn't work if data is Null
);
现在,如评论中所述,评论代码在每种情况下都有效,但我想让它以第二种方式工作。可能存在数据为空的情况。所以,我会得到这个错误
TypeError: Cannot read property 'loading' of null
有什么方法可以安全地解构 JavaScript 对象吗?
null
不是一个对象,这就是为什么你不能安全地解构它 :-) 不,你不能在这里使用解构。
最接近有用的句法特征是 optional chaining proposal 中的 data => !data?.loading
,但这等同于 !(data && data.loading)
而不是 data && !data.loading
。
这里有几个选项可以使它与你的第二个选项一起使用。
filter(x => x).filter(({ loading }) => !loading)
或
map(x => x || {}).filter(({ loading }) => !loading)
这两个选项可能不如您注释的代码有效,但这些可能会提高可读性。
我有这个功能:
const someVar = someOtherVar.pipe(
// filter((data) => data && !data.loading) // Works
filter(({ loading }) => !loading), // Doesn't work if data is Null
);
现在,如评论中所述,评论代码在每种情况下都有效,但我想让它以第二种方式工作。可能存在数据为空的情况。所以,我会得到这个错误
TypeError: Cannot read property 'loading' of null
有什么方法可以安全地解构 JavaScript 对象吗?
null
不是一个对象,这就是为什么你不能安全地解构它 :-) 不,你不能在这里使用解构。
最接近有用的句法特征是 optional chaining proposal 中的 data => !data?.loading
,但这等同于 !(data && data.loading)
而不是 data && !data.loading
。
这里有几个选项可以使它与你的第二个选项一起使用。
filter(x => x).filter(({ loading }) => !loading)
或
map(x => x || {}).filter(({ loading }) => !loading)
这两个选项可能不如您注释的代码有效,但这些可能会提高可读性。