Object.getOwnPropertyNames()

课后整理 2020-12-20

Object.getOwnPropertyNames方法返回直接定义在某个对象上面的全部属性的名称,而不管该属性是否可枚举。例如:

var o = Object.defineProperties({}, {
  p1: { value: 1, enumerable: true  },
  p2: { value: 2, enumerable:  false }
});
Object.getOwnPropertyNames(o)
// ["p1", "p2"]

【示例】一般来说,系统原生的属性(即非用户自定义的属性)都是不可枚举的。

//数组实例自带length属性是不可枚举的

Object.keys([]) // []
Object.getOwnPropertyNames([]) // [ 'length' ]
// Object.prototype对象的自带属性也都是不可枚举的 
Object.keys(Object.prototype) // []
Object.getOwnPropertyNames(Object.prototype)
// ['hasOwnProperty',
//  'valueOf',
//  'constructor',
//  'toLocaleString',
//  'isPrototypeOf',
//  'propertyIsEnumerable',
//  'toString']

上面代码可以看到,数组的实例对象([])没有可枚举属性,不可枚举属性有length;Object.prototype对象也没有可枚举属性,但是有不少不可枚举属性。