## 提示信息

    TypeError: cyclic object value (Firefox)
    TypeError: Converting circular structure to JSON (Chrome)

## 错误类型

`TypeError`

## 哪里出错了？

当调用 `JSON.stringify()` 方法时，循环对象引用结构不能被转换为字符串。

## 示例

在如下循环结构中：

    var a = {};
    var b = {};
    a.child = b;
    b.child = a;

`JSON.stringify()` 将会报错

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

在将数据转换成字符串之前需要检查是否有循环对象引用的存在。例如可以指定一个充当替换器的函数作为 `JSON.stringify()` 方法的第二个参数。

    seen = [];

    var replacer = function(key, value) {
      if (value != null && typeof value == "object") {
        if (seen.indexOf(value) >= 0) {
          return;
        }
        seen.push(value);
      }
      return value;
    };

    JSON.stringify(a, replacer);
    // "{"child":{}}"

或者也可以使用现成的类库或者工具函数。例如 Douglas Crockford 为此开发的 cycle.js 。

## 相关内容

- `JSON.stringify`
- cycle.js – Introduces two functions, `JSON.decycle` and`JSON.retrocycle`, which make it possible to encode cyclical structures and dags in JSON, and to then recover them.