Movatterモバイル変換


[0]ホーム

URL:


  1. 面向开发者的 Web 技术
  2. JavaScript
  3. JavaScript 参考
  4. JavaScript 错误参考
  5. TypeError: cyclic object value

此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。

View in EnglishAlways switch to English

TypeError: cyclic object value

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

提示信息

js
TypeError: cyclic object value (Firefox)TypeError: Converting circular structure to JSON (Chrome and Opera)TypeError: Circular reference in value argument not supported (Edge)

错误类型

TypeError

哪里出错了?

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

示例

循环引用

在如下循环结构中:

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

JSON.stringify() 将会报错

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

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

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

js
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}

参见

  • JSON.stringify
  • cycle.js– 介绍两个方法,JSON.decycleJSON.retrocycle,这两个方法能够对循环对象引用结构进行编码和解码,并且使之成为一种扩展的且向下兼容的 JSON 格式。

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp