寻找一种更简单的方法来检查是否存在多个属性&对象中的方法是未定义的

时间:2011-10-07 16:02:50

标签: javascript

请考虑以下代码:

    if(eform[funcName] !== undefined){
        if(eform[funcName].init !== undefined){
            //finally do something
        }
    }

我首先检查eform对象是否具有变量funcName指定的属性。如果是,那么我需要检查该属性是否具有init方法。

有没有办法将这些组合成一个if语句?或许还有比这更优雅的东西?

3 个答案:

答案 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的“插件”部分 配置以启用转换。