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