如果我在控制台中运行JSON.stringify(["hello"])
,则输出符合预期:
<- "["hello"]"
如果我像JSON.stringify(JSON.stringify(["hello"]))
那样运行两次,则会按预期产生以下结果:
<- ""[\"hello\"]""
现在我在this page上尝试了同样的事情。如果我在控制台中运行JSON.stringify(["hello"])
,它会立即返回第二个示例的结果。
<- ""[\"hello\"]""
我不知道那里发生了什么。看起来有人正在覆盖本机JSON.stringify
功能。如果是这样,我该如何恢复呢?
答案 0 :(得分:2)
我认为问题在于有些内容正在添加String.prototype.toJSON
和Array.prototype.toJSON
。如果我在您页面的控制台中执行此操作:
String.prototype.toJSON.toString()
我得到了
"function (){return this.inspect(true)}"
同样
Array.prototype.toJSON.toString()
给了我
"function (){var c=[];this.each(function(a){var b=Object.toJSON(a);if(!Object.isUndefined(b))c.push(b)});return'['+c.join(', ')+']'}"
JSON.stringify
将首先查看一个对象,看它是否有toJSON
,如果有,将使用它来获取该对象的JSON(spec link)。我怀疑添加的实现并不能与浏览器JSON.stringify
共存。