### JavaScript中如何克隆一个对象?
#### Answer
使用对象扩展运算符`...`,对象的自身可枚举属性会被复制到新对象中。这是一个对象的浅复制
const obj = { a: 1, b: 2 }
const shallowClone = { ...obj }
使用这项技术,原型会被忽略。除此之外,嵌套的对象不会被复制,但是相反的它们的引用会被复制,因此嵌套对象还是会引用原始的那个同一个对象。深克隆比浅克隆要更复杂,因为需要有效地克隆任何类型的对象(Date,RegExp,Function,Set等等),而且它们可能都是嵌套对象。
其他可选用的方法包括:
* `JSON.parse(JSON.stringify(obj))`可以被用来深克隆一个对象,但是它是cpu密集型操作而且只接受有效的JSON格式(因此它会去掉函数而且不允许循环引用)
* `Object.assign({}, obj)`是另外一个浅克隆方法
* `Object.keys(obj).reduce((acc, key) => (acc[key] = obj[key], acc), {})`一个更冗长的替代方法展示了更深层的概念
#### Good to hear
* JavaScript传递对象的时候传递的是引用,意味着嵌套对象复制的时候复制的是引用而不是值
* 同样的方法可以被用来合并两个对象
##### Additional links