它看起来像JSON.stringify()执行两次

时间:2014-05-15 10:26:53

标签: javascript json

如果我在控制台中运行JSON.stringify(["hello"]),则输出符合预期:

<- "["hello"]"

如果我像JSON.stringify(JSON.stringify(["hello"]))那样运行两次,则会按预期产生以下结果:

<- ""[\"hello\"]""

现在我在this page上尝试了同样的事情。如果我在控制台中运行JSON.stringify(["hello"]),它会立即返回第二个示例的结果。

<- ""[\"hello\"]""

我不知道那里发生了什么。看起来有人正在覆盖本机JSON.stringify功能。如果是这样,我该如何恢复呢?

1 个答案:

答案 0 :(得分:2)

我认为问题在于有些内容正在添加String.prototype.toJSONArray.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共存。