Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ecma6,Object.assign不';我不做深度复制_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript Ecma6,Object.assign不';我不做深度复制

Javascript Ecma6,Object.assign不';我不做深度复制,javascript,ecmascript-6,Javascript,Ecmascript 6,我希望将'right'作为输出,但它会打印'error' 这意味着,Object.assign尚未完成从源到目标的复杂对象的深度复制。我怎样做深度复制 注意:我知道lodash.deepClone,但我试图避免使用外部框架首先,我想告诉您,它不是防弹解决方案(在日期对象的情况下)。如果您希望“正确”作为答案,以下是您的解决方案: dst = { "a" : 1} src = { "edf" : {"zyx" : "right"}} Object.assign(dst, src) src.edf.

我希望将
'right'
作为输出,但它会打印
'error'

这意味着,
Object.assign
尚未完成从源到目标的复杂对象的深度复制。我怎样做深度复制


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

首先,我想告诉您,它不是防弹解决方案(在日期对象的情况下)。如果您希望“正确”作为答案,以下是您的解决方案:

dst = { "a" : 1}
src = { "edf" : {"zyx" : "right"}}
Object.assign(dst, src)
src.edf.zyx = "wrong"
console.log(dst["edf"]["zyx"])
因此,请阅读这些链接以更好地理解深度复制


是的,
Object.assign()
只执行属性的浅合并。但是,目前还没有用于深度合并、递归发现嵌套对象中属性的内置函数。您可以使用JSON,但对于大型数据集来说,这可能会很慢。尽管如此,它还是尽可能接近内置克隆,而且实际上比大多数库方法都快。需要注意的是,解析JSON和从JSON解析JSON都不适用于函数。也可以拥有属性或原型?遗憾的是,它不应该返回深度副本。试着在我上面的例子obj上运行它,看看它在哪里失败(特别是日期和函数)。它肯定会失败,这就是为什么我给出了链接&还提到了“如果你想“正确”作为答案。注意,这不会复制不可枚举的属性或符号,所以这不是防弹的。
var dst,src = { "edf" : {"zyx" : "right"} };
dst = JSON.parse(JSON.stringify(src));
dst["a"] = 1;
src.edf.zyx = "wrong";
console.log(src, dst);