为了学习,我正在遍历javascript中的对象。现在这相当于吐出函数给出的第一个对象中的每个属性,并递归到它找到的任何子对象(包括函数)。
以 window 对象为例,当 window.top 指向 window 时,函数会陷入无限循环。我应该如何最好地跟踪我已经遍历过的对象以避免递归到它们中?
为了学习,我正在遍历javascript中的对象。现在这相当于吐出函数给出的第一个对象中的每个属性,并递归到它找到的任何子对象(包括函数)。
以 window 对象为例,当 window.top 指向 window 时,函数会陷入无限循环。我应该如何最好地跟踪我已经遍历过的对象以避免递归到它们中?
您可以使用数组来存储您当前正在查看的对象。这应该有助于检测循环引用:
var stack = [];
function traverse(object) {
if (stack.indexOf(object) !== -1) {
return; // if the condition above is true, we have a circular reference
}
stack.push(object);
// here go through object properties, recursively calling traverse()
stack.pop();
}