为什么处理时出现无限递归错误JSON.stringify

Why does an infinite recursion error appear while processing JSON.stringify

function repErr(key, value) {
  let error = {};
  Object.getOwnPropertyNames(value).forEach(function (key) {
      error[key] = value[key];
  });
  return error;
}

当我调用 JSON.stringify(err, repErr) 时,我在控制台中看到递归过多的错误。
我有 firefox 68,我在每次迭代时都调用了调试器,我看到在第四遍时它开始向对象添加如下内容:

{
  0: 'h',
  1: 't',
  2: 't',
  3: 'p',
  // and etc
}

是什么原因,能否解决?

该对象很可能包含循环,其中树中的一个对象引用另一个对象,该对象最终引用第一个对象。我发现这个问题经常发生,例如 axios 中的错误,因为响应对象引用了一个请求对象,而请求对象引用了响应对象。

这是一个经常困扰我们的恼人问题。值得庆幸的是,有像 json-decycle 和其他库这样的库可以通过将循环引用更改为可以在没有堆栈溢出的情况下序列化的内容来解决这个问题。