Object.getOwnPropertyNames()

概述

Object.getOwnPropertyNames()方法返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性)组成的数组。

语法

Object.getOwnPropertyNames(obj)

参数

obj
一个对象,其自身的可枚举和不可枚举属性的名称被返回。

描述

Object.getOwnPropertyNames 返回一个数组,该数组对元素是 obj 自身拥有的枚举或不可枚举属性名称字符串。 数组中枚举属性的顺序与通过 for...in loop(或 Object.keys))迭代该对象属性时一致。 数组中不可枚举属性的顺序未定义。

例子

var arr = ["a", "b", "c"];
print(Object.getOwnPropertyNames(arr).sort()); // 输出"0,1,2,length"

// 类数组对象
var obj = { 0: "a", 1: "b", 2: "c"};
print(Object.getOwnPropertyNames(obj).sort()); // 输出"0,1,2"

// 使用Array.forEach输出属性名和属性值
Object.getOwnPropertyNames(obj).forEach(function(val, idx, array) {
  print(val + " -> " + obj[val]);
});
// 输出
// 0 -> a
// 1 -> b
// 2 -> c

//不可枚举属性var my_obj = Object.create({}, { getFoo: { value: function() { return this.foo; }, enumerable: false } });
my_obj.foo = 1;

print(Object.getOwnPropertyNames(my_obj).sort()); // 输出"foo, getFoo"

如果你只要获取到可枚举属性,查看 Object.keys 或用 for...in循环(还会获取到原型链上的可枚举属性,不过可以使用hasOwnProperty()方法过滤掉)。

下面的例子演示了该方法不会获取到原型链上的属性:

function ParentClass() {}
ParentClass.prototype.inheritedMethod = function () {};

function ChildClass() {
    this.prop = 5;
    this.method = function () {};
}

ChildClass.prototype = new ParentClass;

ChildClass.prototype.prototypeMethod = function () {};

alert(Object.getOwnPropertyNames(new ChildClass() //弹出["prop", "method"]))

规范

Specification Status Comment
ECMAScript 5.1 (ECMA-262)
Object.getOwnPropertyNames
Standard Initial definition.
Implemented in JavaScript 1.8.5
ECMAScript 6 (ECMA-262)
Object.getOwnPropertyNames
Release Candidate  

浏览器兼容性

Feature Firefox (Gecko) Chrome Internet Explorer Opera Safari
Basic support 4 (2.0) 5 9 12 5
Feature Firefox Mobile (Gecko) Android IE Mobile Opera Mobile Safari Mobile
Basic support ? ? ? ? ?

Based on Kangax's compat table.

SpiderMonkey-specific notes

  • Prior to SpiderMonkey 28 (Firefox 28 / Thunderbird 28 / SeaMonkey 2.25 / Firefox OS 1.3), Object.getOwnPropertyNames did not see unresolved properties of Error objects. This has been fixed in later versions (bug 724768).

相关链接

文档标签和贡献者

向此页面作出贡献: teoli, AlexChao, ziyunfei, Arenwisdom
最后编辑者: teoli,