考虑对对象的嵌套属性进行比较:
display.entities.listAfter.text === 'blah';
如果嵌套查找中的属性之一不存在,则会出现类型错误,例如:
TypeError: Cannot read property 'listAfter' of undefined
尝试并抓住。可行,但不是很优雅,我想知道是否有更好的方法。
除了进行尝试和捕获外,还有没有一种规范的方法可以在进行比较之前检查嵌套属性是否存在?
答案 0 :(得分:1)
我不了解规范,但是有时我会这样做:
display.entities &&
display.entities.listAfter &&
display.entities.listAfter.text === 'blah'
但是当然很快就会变得笨拙。如果您真的希望它看起来不错,请转到lodash!
https://lodash.com/docs/4.17.10#get
您可以提供.get函数的路径,甚至可以在找不到默认值的情况下指定默认值
_.get(display, 'entities.listAfter.text') === 'blah'
答案 1 :(得分:0)
我喜欢对嵌套属性使用简单的功能获取器,其智能默认值为:
const getValue = (obj = {}, path = []) => {
return path.reduce((xs, x) => (xs && xs[x]) ? xs[x] : undefined, obj);
};
const display = {
"entities": {
"listAfter": {
"text": 1
}
}
};
console.log(getValue(display, ['entities', 'listAfter', 'text']));
console.log(getValue(display, ['entities', 'listAfter', 'foo']));
console.log(getValue(display, ['entities', 'listAfter']));