这是在ES6中克隆对象的好方法吗?

谷歌搜索“javascript克隆对象”带来了一些非常奇怪的结果,其中一些已经过时了,有些太复杂了,这难道不是那么容易吗:

let clone = {...original};

这有什么问题吗?


答案 1

有利于浅层克隆对象传播是 ECMAScript 2018 的标准部分

对于深度克隆,您需要一个不同的解决方案

const clone = {...original}到浅层克隆

const newobj = {...original, prop: newOne}以不可变方式将另一个 prop 添加到原始属性中,并存储为新对象。


答案 2

编辑:当这个答案发布时,语法在大多数浏览器中不可用。如今,您应该可以使用它(除非您需要支持IE 11)。{...obj}

使用 Object.assign。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

var obj = { a: 1 };
var copy = Object.assign({}, obj);
console.log(copy); // { a: 1 }

但是,这不会成为深度克隆。目前还没有原生的深度克隆方法。

编辑:正如评论中提到的@Mike“Pomax”Kamermans,您可以使用JSON.parse(JSON.stringify(input))