有没有一种优雅的方法来检查对象中是否存在键和值,然后使用它?

vhf*_*lat 1 javascript

通常,与redux和javascript一起使用时,我发现自己输入了冗长的代码行以在对象中使用单个值。

const mapStateToProps = (state) => ({
  valueIwant: state.data && state.data.user && state.data.user.valueIWant || ''
})
Run Code Online (Sandbox Code Playgroud)

我知道我可以设置默认状态,但在许多情况下,data对象可能来自API调用或者也许我吨data1data2data3等所有来自API的,它不是写的默认状态是可行的所有的人。

有没有捷径可以做到这一点?

T.J*_*der 5

这里将是,你可以,如果你使用的是巴贝尔或类似(这你可能是,如果你正在使用反应)使用它今天:可选链接

const mapStateToProps = (state) => ({
  valueIwant: state.data?.user?.valueIWant || ''
//                      ^-----^------------------- ***
})
Run Code Online (Sandbox Code Playgroud)

?.装置,如果在其前面的值是nullundefined,表达式结束那里,其结果是undefined

您还可以将无效的合并运算符扔给它:

const mapStateToProps = (state) => ({
  valueIwant: state.data?.user?.valueIWant ?? ''
})
Run Code Online (Sandbox Code Playgroud)

这仅使用''在到底是先于为nullundefined(而不是其他falsy值一样0''等)。

这两个提议都是第3阶段,JavaScript引擎正在积极地增加对它们的支持。(Chrome的V8引擎当前具有可选的链接,但位于标志后面。)