-
循环引用对象在序列化的时候就会发生问题
- 调用
JSON.stringify()对该类对象进行序列化,就会报错:Converting circular structure to JSON.
- 调用
const isCycleObject = (obj, parent) => {
// parentArr用于存储每个对象的父级对象,初始化时将当前对象添加为第一个父级对象
const parentArr = parent || [obj]
for (let i in obj) {
if (typeof obj[i] === 'object') {
let flag = false
// 检查当前对象是否已经在父级数组中存在,如果存在则表示存在循环引用
parentArr.forEach((pObj) => {
if (pObj === obj[i]) {
flag = true
}
})
if (flag) return true
// 递归调用isCycleObject函数判断当前对象的属性是否存在循环引用
flag = isCycleObject(obj[i], [...parentArr, obj[i]])
if (flag) return true
}
}
// 遍历完所有属性后,未找到循环引用则返回false
return false
}
const a = 1
const b = { a }
const c = { b }
const o = { d: { a: 3 }, c }
o.c.b.aa = a
console.log(isCycleObject(o))