在 JavaScript 中安全地从对象中提取属性
2020-01-23
194
我有这个函数:
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 对象?
2个回答
这里有几个选项可以使其与第二个选项一起工作。
filter(x => x).filter(({ loading }) => !loading)
或
map(x => x || {}).filter(({ loading }) => !loading)
这两个选项可能不如您注释的代码那么高效,但它们可能会提高可读性。
Siva Kondapi V
2020-01-23
null
不是对象,这就是为什么您无法安全地解构它 :-) 不,您不能在这里使用解构。
最接近有用的语法特征是来自
可选链
提案
的
data => !data?.loading
,但这相当于
!(data && data.loading)
而不是
data && !data.loading
。
Bergi
2020-01-23