寻找一种更简单的方法来检查是否多个属性&对象中的方法是未定义的
Looking for a simpler way to check if multiple properties & methods in an object are undefined
考虑以下代码:
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的"插件"部分配置以启用转换。
相关文章:
- 序列化数据属性中对象的最可靠方法
- 如何从对象的原型方法访问JavaScript对象属性
- 设置嵌套对象属性的更好方法
- JQuery示例不起作用-“;对象没有't支持属性或方法'按钮'&”;
- 对象不支持属性或方法“自动完成”
- 为什么我可以在Array属性对象中找到Javascript Array for Each方法
- Es6:能够在设置/更新/删除对象属性时调用自定义方法
- 区分具有相同名称的属性和方法
- sails.js beforeCreate方法只接收required设置为true的模型属性
- SCRIPT438:对象没有't支持属性或方法'endsWith'在IE10中
- 有什么方法可以将类型指定为 self?或解决方法“属性类型不兼容”
- 打字稿 - 为什么猫鼬中不存在“方法”属性
- 从JavaScript中的另一个方法属性中引用对象方法属性
- Javascript:通过在数组上循环来创建对象方法/属性
- 冲突/方法/属性Javascript错误
- 将' this '的继承扩展到' object '的方法/属性
- Javascript继承静态和实例方法/属性
- 我可以为对象设置正则表达式吗's方法/属性选择器
- 发现HTML对象标记方法/属性
- 为什么我的主干模型奇怪地嵌套在集合中,需要钻取才能访问方法/属性?