【发布时间】:2014-01-06 21:03:55
【问题描述】:
我对 javascript 对象(数组)深拷贝有问题。我读了很多处理它的好方法。而且我也知道 jQuery 有 $.extend API 来解决这个问题。但我的问题是:我可以只使用 JSON stringify 和 parse 方法来解决这个问题吗?
这是我的代码:
function deepCopy(oldValue) {
var newValue
strValue = JSON.stringify(oldValue)
return newValue = JSON.parse(strValue)
}
var a = {
b: 'b',
c: [1,2,4],
d: null
}
copy = deepCopy(a)
console.log(a === copy) // false
console.log(a.c === copy.c) // false
PS:我知道如果不是所有对象都是可序列化的,但我知道的唯一情况是当对象包含一个函数属性时。还有其他情况吗?
【问题讨论】:
-
并非所有对象都可以序列化为 JSON。即使是这样,将它们转换为字符串然后解析字符串似乎也是低效的。但它应该工作得很好。唯一的问题是旧版本的 IE,你需要一个 polyfill。
-
谢谢!我只知道如果该对象包含作为函数的属性,则该对象不可序列化。但是如果其他情况是对象不可序列化呢?
-
另一方面,相比普通方式,使用JSON深度复制对象真的效率低下吗?
-
您的深层副本有效。 object comparison 正在正常工作。一切都好!
标签: javascript json deep-copy