2023年10月16日 星期一

注意 enumerable 的特性會引響 Object.assign() 的行為

 注意 enumerable 的特性會引響 Object.assign() 的行為

前言

  在之前的 關於自定義 Property 的 enumerable 與 在 JavaScript 裡複製物件的新選項 分別提到了 enumerable 與 Object.assign() ,它們其實會互相引響,在此把學習的過程做個紀錄。


內容

  範例如下

let obj = Object.create(
  {},
  {
    prop1: {
      value: 2, 
      enumerable: false, 
    },
    prop2: {
      value: 3,
      enumerable: true, 
    },
  },
);
//
let copy = Object.assign({}, obj);
console.log(copy); 
// [object Object] {
//   prop2: 3
// }


範例分別自定義 prop1 與 prop2  兩個 Property ,一個允許 enumerable ,另一個則不允許,接著透過 Object.assign() 後會發現 prop1 沒有被成功複製,所以 enumerable 不只引響 Object.getOwnPropertyNames() 的結果,也會引響 Object.assign() 的結果。


參考資料

[ developer.mozilla.org ] Object.defineProperty()

[ developer.mozilla.org ] Object.assign()


相關文章與資料

關於自定義 Property 的 enumerable

在 JavaScript 裡複製物件的新選項


沒有留言:

張貼留言