檢查是否為自定義的 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()
沒有留言:
張貼留言