传递给函数的js对象变为字符串

时间:2011-08-22 20:09:50

标签: javascript

`我编写了一个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'参数突然变成了一个字符串?

3 个答案:

答案 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废话..