A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Errors/Cyclic_object_value below:

TypeError: cyclic object value - JavaScript

TypeError: cyclic object value

在JSON中出现循环引用时,JavaScript 会抛出 "cyclic object value" 的异常。JSON.stringify()并不会尝试解决这个问题,因此导致运行失败。

提示信息
TypeError: cyclic object value (Firefox)
TypeError: Converting circular structure to JSON (Chrome and Opera)
TypeError: Circular reference in value argument not supported (Edge)
错误类型 哪里出错了?

JSON 格式本身不支持循环引用对象(尽管存在IETF 草案),因此 JSON.stringify() 并不会尝试解决这个问题而是直接运行失败。

示例 循环引用

在如下循环结构中:

var circularReference = { otherData: 123 };
circularReference.myself = circularReference;

JSON.stringify() 将会报错

JSON.stringify(circularReference);
// TypeError: cyclic object value

要处理循环引用的 JSON,可以使用支持这种结构的库 (例如cycle.js)),或者自己实现,需要通过可序列化值查找、替换或者移除循环引用。

下面的代码片段演示了如何使用JSON.stringify()的 replacer 参数查找和过滤(会导致数据丢失)循环引用。

const getCircularReplacer = () => {
  const seen = new WeakSet();
  return (key, value) => {
    if (typeof value === "object" && value !== null) {
      if (seen.has(value)) {
        return;
      }
      seen.add(value);
    }
    return value;
  };
};

JSON.stringify(circularReference, getCircularReplacer());
// {"otherData":123}
参见

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4