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

Looking for a simpler way to check if multiple properties & methods in an object are undefined

本文关键字:方法 属性 未定义 对象 是否 一种 寻找 更简单 检查      更新时间:2023-09-26

考虑以下代码:

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

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

是否有任何方法将这些组合成一个单一的if语句?或者是更优雅的东西?

使用短路求值:

if (eform[funcName] !== undefined && eform[funcName].init !== undefined)

如果eform[funcName]未定义,则语句为false且eform[funcName].init不被检查。根据偏好/可读性的不同,下面这些也是有效的:

if (eform[funcName] && eform[funcName].init)

认为一个更好:

if(eform[funcName] !== undefined && eform[funcName].init !== undefined){
  //some code
}

如果第一个条件为假,则不检查第二个条件

JS有一种新的、优雅的方式来实现这一点——可选链接操作符

它看起来像这样:

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

适用于所有现代浏览器。但是babel还没有本地添加对该操作的支持,因此会抛出编译错误。在这种情况下,babel建议:

添加@babel/plugin-proposal-optional-chaining(https://git.io/vb4Sk)到Babel的"插件"部分配置以启用转换。