是否有一种简单的方法来本地确定JavaScript中的对象中是否存在深属性?例如,我需要访问这样的属性:
var myVal = appData.foo.bar.setting;
Run Code Online (Sandbox Code Playgroud)
但是有可能还没有定义foo,foo.bar或foo.bar.setting.在Groovy中,我们可以这样做:
def myVal = appData?.foo?.bar?.setting
Run Code Online (Sandbox Code Playgroud)
有没有类似的方法在JavaScript中执行此操作,而无需编写自定义函数或嵌套if语句?我发现这个答案很有用,但我希望有一个更优雅,更少自定义的方式.
Rob*_*b W 16
我觉得这很方便:
var myVal = (myVal=appData) && (myVal=myVal.foo) && (myVal=myVal.bar) && myVal.settings;
Run Code Online (Sandbox Code Playgroud)
如果存在属性,则将尝试序列的下一部分.
当表达式&&求值为false时,将不检查表达式的下一部分.如果myVal.appData.foo.bar.settings未定义任何一个,则myVal(undefined(将评估为false.
对不起,这不是很好:
var myVal = appData && appData.foo && appData.foo.bar && appData.foo.bar.setting;
Run Code Online (Sandbox Code Playgroud)
另外一个选项:
try {
var myVal = appData.foo.bar.setting;
} catch (e) {
var myVal = undefined;
}
Run Code Online (Sandbox Code Playgroud)
的.operator不是真正用于访问这样的对象.可能使用函数是个好主意.
ES2020 中引入了可选链运算符( ) 。?.现在,您应该能够编写:
const myVal = appData?.foo?.bar?.setting
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4314 次 |
| 最近记录: |