`我编写了一个js函数来遍历一个javascript对象,并用console.log()输出它的内容。当遇到作为对象的属性时,它会递归调用自身。问题出在递归循环中,传入的属性不显示任何子属性。
获取下面的示例(同样在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);
我知道我在这里遗漏了一些微妙的东西,但我不确定为什么我将'property'传递给'object'参数突然变成了一个字符串?
答案 0 :(得分:3)
property是一个包含值“payload”的字符串。
object[property]
是{'fetch':'1', 'xml':.... }
答案 1 :(得分:1)
对象键始终是字符串。因此,当您执行typeof property
时,property
是关键而不是值。你可能想做typeof object[property]
。
所以他们没有被转换成字符串,你只是得到了错误对象的类型。
答案 2 :(得分:1)
这是固定的解决方案:
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);
请删除使用保留关键字,如对象.. IS night废话..