1. 程式人生 > 程式設計 >Object.keys() 和 Object.getOwnPropertyNames() 的區別詳解

Object.keys() 和 Object.getOwnPropertyNames() 的區別詳解

大部分情況下Object.getOwnPropertyNames()與Object.keys(obj)的功能是一樣的,我們一般也是用來獲取一個JSON物件中所有屬性,例如

const obj = {
  property1: 1,property2: 2,};

console.log(Object.keys(obj));
console.log(Object.getOwnPropertyNames(obj));

輸出:

> Array ["property1","property2"]
> Array ["property1","property2"]

Object.keys() 方法會返回一個由一個給定物件的自身可列舉屬性組成的陣列,陣列中屬性名的排列順序和正常迴圈遍歷該物件時返回的順序一致 。

Object.getOwnPropertyNames()方法返回一個由指定物件的所有自身屬性的屬性名(包括不可列舉屬性但不包括Symbol值作為名稱的屬性)組成的陣列。

共同點:都是返回自身的屬性,不會返回原型鏈上的。

區別: Object.keys()返回可列舉的,Object.getOwnPropertyNames()返回所有的。

Person = function(name){
  this.name = name || ''
}
Person.prototype.sayHello = function(){
  console.log('hello')
}
p = new Person('yangyang')
p.age = 18
Object.defineProperties(p,{
  age:{
    enumerable:false
  }
})
console.log(Object.keys(p)) // ["name"]
console.log(Object.getOwnPropertyNames(p)) // ["name","age"]

參考資料:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames

到此這篇關於Object.keys() 和 Object.getOwnPropertyNames() 的區別詳解的文章就介紹到這了,更多相關Object.keys()和Object.getOwnPropertyNames()內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!