在阅读嵌套的属性之前,您需要检查每个属性:
const name = object && object.obj1 && object.obj1.obj2 && object.obj1.obj2.name;
这既费力又冗长,因为您必须一遍又一遍地重复相同的事情来访问深度嵌套的属性。
我建议使用一个safeEval
函数,它用 try/catch 包装您潜在的危险属性访问代码,并undefined
在发生错误时返回。这比手动检查每个属性要短得多:
const name = safeEval(() => obj.obj1.obj2.name);
下面是一个例子:
const obj = { obj1: { obj2: { name: 'Hello' } } }
function safeEval(fn) {
try { return fn(); }
catch { return undefined; }
}
const a = obj && obj.obj1 && obj.obj1.obj2 && obj.obj1.obj2.name;
const b = safeEval(() => obj.obj1.obj2.name);
const c = safeEval(() => obj.obj1.obj2.obj3.obj4.name);
console.log(a, b, c);