«слишком много рекурсии» в этой рекурсивной функции, написанной на JavaScript (obj2str) - PullRequest
1 голос
/ 10 августа 2011

Что стоит с этим фрагментом кода:

function obj2string(obj) {
    var result = '';

    for(var i in obj) {
        if(typeof(obj[i]) === 'object') {
            result += obj2string(obj[i]);
        } else {
            result += i + " => " + obj[i] + "\n";
        }
    }

    return result;
}

Предполагается рекурсивно концентрировать строку результата с новыми свойствами, однако в какой-то момент рекурсии слишком много.

Я передавал такой объект: $(this); -> из jQuery.

$(this)

Являясь экземпляром этого селектора jQuery: $('.debug'); witch имеет один класс, соответствующий текущему документу.

Ответы [ 4 ]

1 голос
/ 10 августа 2011

У вас почти наверняка есть циклическая ссылка (т. Е. Одно из свойств входного объекта (или одно из свойств этого свойства и т. Д.)), Ссылающаяся на другое свойство в структуре, которое приводит к самому себе.

Мгновенная мысль должна показать, почему это не может сработать.

1 голос
/ 10 августа 2011

if(typeof(obj[i]) === 'object') { будет выполнено, если obj[i] равно null.Вы знаете об этом?Попробуйте с $.isPlainObject() ( источник )

1 голос
/ 10 августа 2011
var s = JSON.stringify(obj, null, 4);
0 голосов
/ 10 августа 2011

Вызов JSON.stringify (jQueryObject) в консоли Chrome выдает ошибку «циклическая структура».

...