【发布时间】:2018-01-29 04:21:47
【问题描述】:
使用JSON.parse(JSON.stringify(obj)) 是我见过的一个老技巧,它经常用于深度复制对象。
它是否创建了对象的真正“深拷贝”?
在性能方面,使用它是否明智?
【问题讨论】:
-
在很多情况下对性能来说并不明智,如果对象有循环引用,则有引发堆栈溢出的风险。
标签: javascript json object
使用JSON.parse(JSON.stringify(obj)) 是我见过的一个老技巧,它经常用于深度复制对象。
它是否创建了对象的真正“深拷贝”?
在性能方面,使用它是否明智?
【问题讨论】:
标签: javascript json object
使用这种方法深度复制对象的最大问题是对象必须是 JSON 可序列化的。例如以下对象:
let obj = {
func: function() {
console.log("hello world!");
}
}
由于函数不是 JSON 可序列化的,因此无法正确复制。还有许多其他问题,例如循环引用。这实际上只适用于简单、普通的对象,因此不是一个特别好的解决方案。我建议使用下划线或 lodash 之类的东西来进行高性能深度复制。
【讨论】:
JSON.parse(JSON.stringify(obj)) 存在一些问题
大多数开发人员的主要问题是丢失任何不属于JSON spec的东西
JSON 方法在解析循环引用时也会抛出异常。
也就是说它确实有一些优势:
就创建对象的真正深层副本而言...这将是真正的深层副本,因为它将尽可能多地进入对象,它不会丢弃某些信息,如上所述。
【讨论】: