序列化/反序列化JavaScript对象时出现“无效字符”错误消息

时间:2016-12-16 05:10:25

标签: javascript json

我有以下功能来“克隆”一个对象。有时我们会在浏览器的控制台中看到“无效字符”错误消息。基于JSON对象的documentation,此函数应该完美无缺。我也检查了,被序列化的对象没有实现toJSON()功能。什么样的对象会导致这个错误?

function deepCopy (obj) {
    return JSON.parse(JSON.stringify(obj));
}

更新:似乎只发生在IE11上。

2 个答案:

答案 0 :(得分:1)

JSON.stringify(undefined)返回undefined而不是字符串“undefined”。如MDN所示:

  

JSON.stringify也可以在传入“纯”时返回undefined   JSON.stringify(function(){})JSON.stringify(undefined)等值。

JSON.parse收到一个不可序列化的对象时会有一些不清楚的错误消息,因为它会尝试首先将此对象转换为字符串。我曾经在Chrome中遗失了很多时间:Unexpected token u in JSON at position 0

那是因为你是转换为字符串的undefined的第一个字母。尝试解析一个对象时会出现类似的错误,这会给字符串“[object Object]”提供一个有效的开括号,但之后会出现意外的令牌。记住这些案例是件好事。

答案 1 :(得分:0)

是的,如果值包含'字符,则会发生这种情况。

所以,请清除特殊字符,另一种方法是在stringify之前转换为utf-8。

那样,我早点解决了我的问题。