在 JS 中,函數和對象都是淺拷貝(地址引用);其餘的,例如布爾值、數字等基礎數據類型都是深拷貝(值引用)。函數
深拷貝code
- JSON.parse(JSON.stringify(src)):這種方法有侷限性,若是屬性值是函數或者一個類的實例的時候,沒法正確拷貝
- 藉助第三方庫:jq 的extend(true, result, src1, src2[ ,src3])、lodash 的cloneDeep(src)
- 藉助 HTML5 的MessageChannel:這種方法有侷限性,當屬性值是函數的時候,會報錯
- 手動作一個「完美」的深拷貝函數:https://godbmw.com/passages/2019-03-18-interview-js-code/
淺拷貝對象
- ES6 的 Object.assign()
- ES7 的...解構運算符