我正在尝试在 Chrome 中对对象进行字符串化(...),并且我不断收到“将循环结构转换为 JSON”消息,尽管事实上(据我所知)不存在这样的结构。
我已经检查了十几次代码,但找不到任何循环引用。除了这个痛苦无用的错误消息之外,有什么方法可以让 Chrome 告诉我它在抱怨什么?
我正在尝试在 Chrome 中对对象进行字符串化(...),并且我不断收到“将循环结构转换为 JSON”消息,尽管事实上(据我所知)不存在这样的结构。
我已经检查了十几次代码,但找不到任何循环引用。除了这个痛苦无用的错误消息之外,有什么方法可以让 Chrome 告诉我它在抱怨什么?
如果这太明显了,请原谅我。在撰写本文时,我不知道您尝试了什么。
插入
console.log(the object);
用您传递给的对象替换“对象”JSON.stringify()
JSON.stringify
在通话前插入这一行
并在控制台日志(班次控制 J)中查找该对象。在控制台日志中,对象将被标记为“>”符号,可以单击该符号以扩展字段。
它抱怨一个有指向自身的指针的对象,比如这种对象:
A = [];
A[0] = A;
JSON.stringify(A); // circular error
您可以使用dojox.json.ref
来查找循环引用。此代码打印您的 json 表示objectWithCircularReferences
:
require(["dojox/json/ref"], function(){
console.log(dojox.json.ref.toJson(objectWithCircularReferences));
});
控制台输出中出现的任何“$ref”子字符串都将帮助您定位循环引用。如果您愿意,也可以像这样将此 json 输出通过管道传输到全局变量 ZZZ:
require(["dojox/json/ref"], function(){
window.ZZZ = dojox.json.ref.toJson(objectWithCircularReferences);
});
当然,您需要事先包含 dojo 库。在一个 html 文件中:
<script src="//yandex.st/dojo/1.9.1/dojo/dojo.js"></script>
在萤火虫控制台中:
include("//yandex.st/dojo/1.9.1/dojo/dojo.js")
在 Chrome 控制台中:
SCRIPT = document.createElement('script');
SCRIPT.src = '//yandex.st/dojo/1.9.1/dojo/dojo.js';
document.body.appendChild(SCRIPT);