#淺拷貝

本篇文章翻譯自 How to clone an array in JavaScript - by Yazeed Bzadough on freeCodeCamp @medium,搭配 JS 的拷貝 by Kai @github 提及的概念,整理成筆記。


TL; TR

  • 8. JSON.parse and JSON.stringify 是深拷貝。其他都是淺拷貝。
  • 「call by reference」與「call by value」?
    • 基本型別 (Primitive Type) - number, string, boolean, null, undefined - 傳值
    • 物件 (Objects) - array, function, object - 傳址
    • array/object 當中若含有複合型別時,此複合型別是 call by reference 而不是 by value。
  • 「淺拷貝」與「深拷貝」的定義與差異?
    • 淺拷貝在複製 object 時,會參考到同一個物件,並沒有將此物件拷貝到並建立出新的關聯。
    • 深拷貝在複製 object 時,會獨立出來不共用同一個記憶體位置,改動 newObject 時不會動到 oldObject
  • 這只是試看看能否用一個步驟就能深拷貝陣列的方式而寫的文章,網路上能找到其他更有趣的實作唷!
    • 更多深拷貝與淺拷貝的比較也可以參考 Larry LuZHI-WEI
    • jquery - $.extend()
    • loadash - _.cloneDeep()

閱讀我吧!