传递给一个函数的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':.... }
答
对象键总是字符串。所以当你做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可能废话了..
嗯,是啊,真不错。谢谢! –