我有以下名为this.props
的对象:
{
children: null,
location: {
action: 'POP',
query: {
seconds: '300'
}
}
}
在查看this question后,我写了以下代码:
let seconds = 0;
console.log(this.props);
if('seconds' in this.props) {
seconds = parseInt(this.props.location.query.seconds, 10);
}
console.log(seconds);
在控制台中,对象的记录如上,但seconds
记录为0。
我不明白我的if检查有什么问题,即使嵌套对象具有正确的属性,似乎条件失败(问题是当没有查询对象时,整个this.props对象是空 - 所以我需要检查嵌套属性。)
答案 0 :(得分:1)
秒不在this.props;它在查询上。 in
运算符不是递归的,只是第一级:
if('seconds' in this.props.location.query) {
seconds = parseInt(this.props.location.query.seconds, 10);
}
console.log(seconds); // 300
如果您想以递归方式执行此操作,请创建自己的函数:
let isIn = function (obj, key) {
return isObj(obj) ? (key in obj) || Object.values(obj).filter(f => isIn(f, key)).length > 0 : false;
}
其中isObj
是一个验证参数是否为对象的函数。你可以使用lodash或者等同物,或者像:
let isObj = t => (t !== null) && (typeof t === 'object');