JavaScript中如何克隆一個對象?


### 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傳遞對象的時候傳遞的是引用,意味着嵌套對象復制的時候復制的是引用而不是值
* 同樣的方法可以被用來合並兩個對象
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM