Javascript-在检查对象是否具有属性时,如何避免多个if条件检查?

Javascript-在检查对象是否具有属性时,如何避免多个if条件检查?,javascript,object,Javascript,Object,我如何避免这种长时间的if条件 if (typeof window.checkoutConfig.shipping !== "undefined") { if (typeof window.checkoutConfig.shipping.rules !== "undefined") { if (typeof window.checkoutConfig.shipping.rules.express !== "undefine

我如何避免这种长时间的if条件

if (typeof window.checkoutConfig.shipping !== "undefined") {
    if (typeof window.checkoutConfig.shipping.rules !== "undefined") {
        if (typeof window.checkoutConfig.shipping.rules.express !== "undefined") {
            if (typeof window.checkoutConfig.shipping.rules.express.express_note !== "undefined") {
                this.expressNote(window.checkoutConfig.shipping.rules.express.express_note || "");
            }
        }
    }
}
是否有一种方法可以替代,例如(伪代码):
isset(window.checkoutConfig.shipping.rules.express.express\u note)

请看一下

它将允许您编写:

window.checkoutConfig.shipping?.rules?.express?.express\u注释
正如评论中提到的,您可能希望使用以使其与较旧的浏览器兼容

var a={};
a?.b?.c
将汇编为:

var\u a$b;
变量a={};
a==null?无效0:(_a$b=a.b)==null?无效0:_a$b.c;

ES2020引入了可选链接,以防止出现类似
无法读取未定义属性的错误。就加一个?在每个可选属性之前:
window.checkOutConfig.shipping?.rules?.express?.express\u note
如果属性不存在,则返回未定义的
,如果属性存在,则返回属性的值。

您可以尝试


来吧,我正要回答这个问题,但你比我抢先一步。这只能防止
null
未定义的
值-依赖
typeof
instanceof
的逻辑仍然需要更复杂的保护逻辑。值得注意的是,如果你试图支持早于2020年的浏览器,你的日子会不好过。是吗还有一种选择是由旧浏览器支持的?当然,您可以使用babel使其与旧浏览器兼容
try {
  this.expressNote(window.checkoutConfig.shipping.rules.express.express_note || "");
} catch (e) {
  // meh
}