循环对象值
并非所有对象都可以转换为 JSON 字符串。当对象具有循环自引用时,转换将失败。
这通常是分层数据结构的情况,其中父级和子级都相互引用:
const world = {
name: 'World',
regions: []
};
world.regions.push({
name: 'North America',
parent: 'America'
});
console.log(JSON.stringify(world));
// {"name":"World","regions":[{"name":"North America","parent":"America"}]}
world.regions.push({
name: 'Asia',
parent: world
});
console.log(JSON.stringify(world));
// Uncaught TypeError: Converting circular structure to JSON
一旦进程检测到一个循环,就会引发异常。如果没有循环检测,则字符串将无限长。