Open haizhilin2013 opened 3 months ago
第一种方式简单粗暴直接使用 JOSN.stringify ,当对象存在循环引用时会抛出异常:
function hasCircularReference(obj) {
try {
JSON.stringify(obj);
} catch (error) {
return false;
}
return true;
}
第二种方式将遍历过的对象用 Set 记录下来,已经记录过的说明存在循环引用:
function hasCircularReference(obj) {
const cache = new Set();
const list = [obj];
while(list.length) {
const item = list.pop();
if (item === null || typeof(item) !== 'object') continue;
if (cache.has(item)) {
cache.clear();
return true;
}
cache.add(item);
list.push(...Object.values(item));
}
cache.clear();
return false;
}
第1907天 怎样判断某个js对象是否存在循环引用?
3+1官网
我也要出题