2023年8月21日 星期一

檢查是否為自定義的 Property

 檢查是否為自定義的 Property

前言

  在之前的 在 Object 中定義 Property 裡介紹了自定義 Property ,這樣物件裡就會分一般的 Property 與 自定義的 Property ,能夠區分出來嗎?在此把學習的過程做個紀錄。


內容

  範例如下

let obj = {
  a : 10,
  b : 20,
};
Object.defineProperty( obj , 'prop' ,{
  value : 42,
  writable:true
} );
//
console.log( Object.keys(obj) );//["a", "b"]
for(let name in obj){
  console.log(name);
}
//
// "a"
// "b"
//
console.log( Object.getOwnPropertyNames(obj) );//["a", "b", "prop"]
//
console.log( obj.hasOwnProperty('prop') );//true
//
function checkIsDefineProperty( o , name){
  return Object.getOwnPropertyNames(o).includes( name ) && 
    !Object.keys(o).includes(name);
}
//
console.log( checkIsDefineProperty( obj,'a') );//false
console.log( checkIsDefineProperty( obj,'prop') );//true


查了一下發現 JavaScript 本身不直接提供檢查是否為自定義的 Property 的方法,不過可以透過其他方法的結果來得知,在 Object.keys() 與 for ... in 得到的結果都不包含自定義的 Property ,但透過 Object.getOwnPerpertyNames() 可以得到,不過裡面會同時包含一般的 Property,順帶提一下 Object.getOwnProperty() 也可以檢查到自定義的 Property 。綜合以上後就可以檢查是否為自定義的 Property ,只要確定 Property 在 Object.getOwnPerpertyNames() 裡且"不"在 Object.keys() 裡就可以確定是否為自定義的 Property 。


參考資料

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


相關文章與資料

在 Object 中定義 Property


沒有留言:

張貼留言