javascript - 在对象中使用'property'检查嵌套对象上的属性失败

时间:2017-03-25 13:22:47

标签: javascript

我有以下名为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对象是空 - 所以我需要检查嵌套属性。)

1 个答案:

答案 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');