JavaScript如何获取一个对象的属性名

1. Object.getOwnPropertyNames()

返回一个对象本身所有属性名,不管是否可遍历

Object.getOwnPropertyNames(Date)
// ["parse", "arguments", "UTC", "caller", "name", "prototype", "now", "length"]
2. Object.keys()

返回一个对象自身可比遍历属性名。

Object.keys(Date) // []
3. Object.prototype.hasOwnProperty()

返回一个布尔值,判断一个属性是否是对象自身属性,下面的例子中Date.length是Date自身的属性,Date.toString是继承的属性。

Date.hasOwnProperty('length') // true
Date.hasOwnProperty('toString') // false
4. in 运算符和 for…in 循环

in运算符返回一个布尔值,表示一个对象是否具有某个属性。它不区分该属性是对象自身的属性,还是继承的属性。
获得对象的所有可遍历属性(不管是自身的还是继承的),可以使用for...in循环。

var o1 = { p1: 123 };

var o2 = Object.create(o1, {
  p2: { value: "abc", enumerable: true }
});

for (p in o2) {
  console.info(p);
}
// p2
// p1
5. 获得对象的所有属性(不管是自身的还是继承的,也不管是否可枚举)
function inheritedPropertyNames(obj) {
  var props = {};
  while(obj) {
    Object.getOwnPropertyNames(obj).forEach(function(p) {
      props[p] = true;
    });
    obj = Object.getPrototypeOf(obj);
  }
  return Object.getOwnPropertyNames(props);
}
inheritedPropertyNames(Date)
// [
//  "caller",
//  "constructor",
//  "toString",
//  "UTC",
//  ...
// ]
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容