Javascript-在检查对象是否具有属性时,如何避免多个if条件检查?
我如何避免这种长时间的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 (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
}