我有下面的函数来“克隆”一个对象。有时我们会看到浏览器控制台中显示“无效字符”错误消息。基于documentation对于 JSON
对象,此函数应该可以完美运行。我还检查了,正在序列化的对象没有实现 toJSON()
功能。什么样的对象会导致此错误?
function deepCopy (obj) {
return JSON.parse(JSON.stringify(obj));
}
更新:它似乎只发生在 IE11 上。
最佳答案
JSON.stringify(undefined)
返回 undefined
而不是字符串“undefined”。如MDN所示:
JSON.stringify can also just return undefined when passing in "pure" values like
JSON.stringify(function(){})
orJSON.stringify(undefined)
.
JSON.parse 在收到不可序列化对象时会出现一些不清楚的错误消息,因为它会首先尝试将此对象转换为字符串。我曾经在 Chrome 中为此浪费了很多时间:JSON 中位置 0 处出现意外的标记 u
。
这是因为 u 是 undefined
转换为字符串的第一个字母。尝试解析对象时会出现类似的错误,该错误会为字符串“[object Object]”提供有效的左括号,但后面会出现意外的标记o。最好记住这些情况。
关于javascript - 序列化/反序列化 JavaScript 对象时出现 "Invalid character"错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41177623/