首页 > 解决方案 > Javascript:是否有一种干净的方法可以根据变量的值是否存在来访问对象属性?

问题描述

语境:

这更多是样式问题,希望编写更清晰的代码。

问题:

如下代码所示,根据某些变量是否持有值,代码使用变量来更深入地访问对象。我有一种感觉,必须有一种更清洁的方法来解决这个问题,所以我很想得到一些关于这个的意见。非常感谢任何见解。谢谢!

代码:

if (!stageKey) {
    return dataRefreshSpec?.data
}

if (!datasetType) {
    return dataRefreshSpec?.data[stageKey]
}

return dataRefreshSpec?.data[stageKey][datasetType]

标签: javascriptobject

解决方案


我可能首先测试完整路径的存在,然后访问它。如果它不存在,那么你知道你只能走到stageKey如果它存在的话,否则只是.data.

if (stageKey && datasetType) {
    return dataRefreshSpec?.data[stageKey][datasetType]
}

return stageKey ? dataRefreshSpec?.data[stageKey] : dataRefreshSpec?.data

或者像这样,如果我的新语法正确:

return dataRefreshSpec?.data?.[stageKey]?.[datasetType] ??
       dataRefreshSpec?.data?.[stageKey] ??
       dataRefreshSpec?.data

或者有这个旧的备用,它可能会工作,具体取决于您的要求:

return (((dataRefreshSpec || {}).data || {})[stageKey] || {})[datasetType]

最后两个在技术上有点不同,因为它们不测试它们键本身的值,而是将其值应用于对象时的结果。


推荐阅读