javascript - Javascript:是否有一种干净的方法可以根据变量的值是否存在来访问对象属性?
问题描述
语境:
这更多是样式问题,希望编写更清晰的代码。
问题:
如下代码所示,根据某些变量是否持有值,代码使用变量来更深入地访问对象。我有一种感觉,必须有一种更清洁的方法来解决这个问题,所以我很想得到一些关于这个的意见。非常感谢任何见解。谢谢!
代码:
if (!stageKey) {
return dataRefreshSpec?.data
}
if (!datasetType) {
return dataRefreshSpec?.data[stageKey]
}
return dataRefreshSpec?.data[stageKey][datasetType]
解决方案
我可能首先测试完整路径的存在,然后访问它。如果它不存在,那么你知道你只能走到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]
最后两个在技术上有点不同,因为它们不测试它们键本身的值,而是将其值应用于对象时的结果。
推荐阅读
- php - Laravel 雄辩的关系不起作用
- javascript - 使用脚本根据 CSS 条件隐藏整个 div?
- oracle - 如何使用子表设置条件
- c - free() 函数不释放堆内存
- c - 将值传递给子进程处理程序
- python - NameError:python中未定义的嵌套函数
- node.js - Ionic 4 - InAppBrowser 不使用“_blank” - 页面不加载
- javascript - Google Apps 脚本:“很抱歉,发生服务器错误。请稍候,然后重试。” 此脚本偶尔发生
- maven - 如何使用来自 dockerfile 的 Maven 创建和运行 docker 镜像
- typescript - 带有 mousedown、mousemove 和 mouseup 的 Cypress .trigger 命令不起作用