传递给一个函数的js对象变成了一个字符串

问题描述:

`我写了一个js函数来遍历一个javascript对象,并用console.log()输出它的内容。当遇到作为对象的属性时,它递归地调用它自己。问题出在递归循环中,传入的属性不显示任何子属性。传递给一个函数的js对象变成了一个字符串

取下面的示例(同样在JS Fiddle),一旦jsObject.payload被传递到递归调用中,'payload'就会恢复为简单的字符串对象。

var EnumerateObject = function(object, path) { 
    if (!path) path = ''; 

    for (var property in object) { 
     if (object.hasOwnProperty(property)) { 
      if (typeof object[property] === "object") EnumerateObject(property, path + '.' + property); 
      else console.log(path + '.' + property + '=' + typeof property); 
     } 
    } 
} 

var json = '{"success": true, "error": "", "payload": { "fetch": "1", "xml": "<xml />" }}'; 
var jsObject = $.parseJSON(json); 

EnumerateObject(jsObject); 

我知道我失去了一些东西微妙这里,但我不知道为什么我的“财产”传递给“对象”参数突然就成了一个字符串?

属性是一个包含值“有效载荷”的字符串。

object[property]{'fetch':'1', 'xml':.... }

+0

嗯,是啊,真不错。谢谢! –

对象键总是字符串。所以当你做typeof property那么property是不是价值的关键。你可能的意思是做typeof object[property]

因此,他们不被转换为字符串,你只是得到了错误的对象的类型。

这里是固定的解决方案:

var EnumerateObject = function(jsonObject, path) { 
    if (!path) path = ''; 

    for (var prop in jsonObject) { 
     if (jsonObject.hasOwnProperty(prop)) { 

      if (typeof(jsonObject[prop ]) === "object") EnumerateObject(jsonObject[prop ], path + '.' + prop); 
      else console.log(path + '.' + prop + '=' + typeof prop); 
     } 
    } 
} 

var json = '{"success": true, "error": "", "payload": { "fetch": "1", "xml": "<xml />" }}'; 
var jsObject = $.parseJSON(json); 

console.log(typeof(jsObject["payload"])); 
EnumerateObject(jsObject); 

请删除使用RESERVERD关键字状物体.. IE可能废话了..