我有以下功能来“克隆”一个对象。有时我们会在浏览器的控制台中看到“无效字符”错误消息。基于JSON
对象的documentation,此函数应该完美无缺。我也检查了,被序列化的对象没有实现toJSON()
功能。什么样的对象会导致这个错误?
function deepCopy (obj) {
return JSON.parse(JSON.stringify(obj));
}
更新:似乎只发生在IE11上。
答案 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。
那样,我早点解决了我的问题。