JS-遍历对象

JS- Traverse object

我有一个 javascript 对象,它具有嵌套对象作为属性。我想遍历这个 javascript 对象,以获取对象内部每个对象的所有属性的列表。

我编写了一个函数来执行此操作,但由于某种原因,当我 运行 该函数时,我得到了 0 的无限循环。有谁知道这个问题的原因和解决方法吗?

var test = {a: {b: { c: 'value '}}}; 

var traverse = function(object){
  for (var property in object) {
    if (object.hasOwnProperty(property)) {
        console.log(property); 
        traverse(object[property])
    }else {
      console.log('None'); 
      break;
    }
  }
}
traverse(test); 

你在末尾有一个字符串,这个字符串被分隔成一个索引为零的单个字符。从此字符串中,获取位置零处的字符,并使用单个字符再次调用递归。

 key          value           comment
-----  -------------------  -----------
  a    {
           b: {
               c: "value "
           }
       }

  b    {
           c: "value "
       }

  c    "value "

  0    "v"
  0    "v"
  0    "v"                  and so on

此字符的索引为零,依此类推。

为了防止这种习惯,您可以检查 onyl truthy 值(防止 null)和要遍历的对象类型。

var test = { a: { b: { c: 'value ' } } };

var traverse = function (object) {
    for (var property in object) {
        if (object.hasOwnProperty(property)) {
            console.log(property);
            if (object[property] && typeof object[property] === 'object') {
                traverse(object[property]);
            }
        } else {
            console.log('None');
        }
    }
}
traverse(test);