循环对象值

并非所有对象都可以转换为 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

一旦进程检测到一个循环,就会引发异常。如果没有循环检测,则字符串将无限长。