判断javascript是否是循环引用
我理解的javascript中的循环引用指的是:一个对象在它的内部引用了本身。
javascript中循环引用会造成内存泄漏问题,要避免循环引用。js中如何判断是否有循环引用,有如下方式:
1、利用JSON.stringfy()方法特性来判断,若存在循环引用,会抛出异常。
function isCycle(obj){
try {
JSON.stringify(obj);
return false;
} catch (e) {
return true;
}
}
2、利用空数组,每次遍历时存储一份变脸对象,判断数组中是否存在已遍历过的对象,若存在,则说明存在循环引用。
function isCyclic (obj) {
var seenObjects = [];
function detect (obj) {
if (typeof obj === 'object') {
if (seenObjects.indexOf(obj) !== -1) {
return true;
}
seenObjects.push(obj);
for (var key in obj) {
if (obj.hasOwnProperty(key) && detect(obj[key])) {
return true;
}
}
}
return false;
}
return detect(obj);
}