var obj1 = {a:"1"}; obj1.b = {}; obj1.b.a = obj1.b; var obj2 = {a: {c: "1"}}; obj2.a.b = obj2; var obj3 = {a: 1, b: 2, c: {d: 4}} const isLoop = (originObj) => { let wm = new WeakMap(); let rs = false; function dp(obj) { if(!wm.has(obj)) { wm.set(obj, obj) } wm.set(obj, []) let keys = Object.keys(obj); for (let i = 0, len = keys.length; i < len; i++) { key = keys[i]; if(typeof obj[key] === ‘object‘) { if(wm.has(obj[key])) { // 如果循环引用了,终结掉 obj[key] = {}; rs = true; } else { wm.set(obj[key], obj[key]) } dp(obj[key]) } } } dp(originObj); return rs; } console.log(isLoop(obj1)); console.log(isLoop(obj2)); console.log(isLoop(obj3));
这里我看了JONS-js的源码,利用weak-map来做
原文:https://www.cnblogs.com/windseek/p/12888186.html