2023年6月12日 星期一

關於不可列舉的屬性

 關於不可列舉的屬性

前言

  在之前的 在 JavaScript 裡複製物件的新選項 裡初步認識了 Object.assign() ,在學習時發現有所謂的"不可列舉"的屬性,抽個控做個學習,在此做個紀錄。


內容

  不可列舉的屬性的作用是在由於複製物件是透過列舉屬性來個別複製的,如果有屬性不會被列舉,也就代表著複製物件時它不會複製,範例如下

let obj = {
  a : {
    value : 1234
  },
  b : {
    value : 5678,
    enumerable : true
  }
};
//
let copyObj = Object.create( {} , obj );
console.log( Object.assign( {} , obj ) );
//
// [object Object] {
//   a: [object Object] {
//     value: 1234
//   },
//   b: [object Object] {
//     enumerable: true,
//     value: 5678
//   }
// }
console.log( Object.assign( {} , copyObj ) );
//
// [object Object] {
//   b: 5678
// }


要讓物件具有不可列舉的屬性必須要讓物件有 enumerable 這個屬性,如 obj.b ,設定成 true 代表可以被列舉,如果不設視同不可列舉,接著透過 Object.create() 來製造出新的物件,這個新的物件才真正具有該屬性,範例直接透過 Object.assign() 來複製 obj ,結果物件和原本的 obj 一樣,但同樣手法複製 copyObj 會發現結果很不一樣, a 由於不帶有列舉屬性所以不會被複製,b 雖然被複製了,但可以看到並不存在 enumerable 這個屬性,這個屬性比較像是專門給 Object.create() 使用的,要注意的是這個不可列舉的屬性是沒辦法透過列印物件來得知的。

  

參考資料

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

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


相關文章與資料

在 JavaScript 裡複製物件的新選項

沒有留言:

張貼留言