Ecma6,Object.assign 不做深度复制

Ecma6, Object.assign doesn't do a deep copy

本文关键字:深度 复制 assign Object Ecma6      更新时间:2023-09-26
dst = { "a" : 1}
src = { "edf" : {"zyx" : "right"}}
Object.assign(dst, src)
src.edf.zyx = "wrong"
console.log(dst["edf"]["zyx"])

我希望看到'right'作为输出,但它打印'wrong'.

这意味着,Object.assign尚未对从源到目标的复杂对象进行深度复制。如何进行深拷贝?

注意:我知道lodash.deepClone,但我试图避免外部框架

首先,我想告诉你,这不是防弹解决方案(在日期对象的情况下(。如果你想要"正确"作为答案,这是你的解决方案:

var dst,src = { "edf" : {"zyx" : "right"} };
dst = JSON.parse(JSON.stringify(src));
dst["a"] = 1;
src.edf.zyx = "wrong";
console.log(src, dst);

因此,请阅读这些链接以更好地了解深拷贝

克隆 JavaScript 对象的最优雅方式

将 JavaScript 对象复制到新变量不是通过引用?