请考虑以下代码:
if(eform[funcName] !== undefined){
if(eform[funcName].init !== undefined){
//finally do something
}
}
我首先检查eform
对象是否具有变量funcName
指定的属性。如果是,那么我需要检查该属性是否具有init
方法。
有没有办法将这些组合成一个if
语句?或许还有比这更优雅的东西?
答案 0 :(得分:2)
使用短路评估:
if (eform[funcName] !== undefined && eform[funcName].init !== undefined)
如果eform[funcName]
未定义,则语句为false,eform[funcName].init
永远不会被检查。根据偏好/可读性,以下内容也是如此:
if (eform[funcName] && eform[funcName].init)
答案 1 :(得分:2)
认为一个更好:
if(eform[funcName] !== undefined && eform[funcName].init !== undefined){
//some code
}
如果第一个条件为假,则不会检查第二个条件。
答案 2 :(得分:0)
JS具有一种新颖,优雅的方法来实现这一目标-Optional Chaining运算符
它看起来像这样:
if (eform?[funcName]?.init !== undefined) {
// do something
}
可与所有现代浏览器一起使用。 但是babel尚未在本地添加对此操作的支持,并引发了编译错误。在这种情况下,babel建议:
添加@ babel / plugin-proposal-optional-chaining (https://git.io/vb4Sk)到Babel的“插件”部分 配置以启用转换。