Object.getOwnPropertyNames与Object.key的差异

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

在JavaScriptObject.getOwnPropertyNamesObject.keys之间的区别是什么?

提问于
用户回答回答于

有一点区别。Object.getOwnPropertyNames(a)返回对象的所有属性aObject.keys(a)返回所有可枚举的属性。这意味着如果你定义你的对象属性而不使它们中的一些enumerable: false这些方法会给你相同的结果。

这很容易测试:

var a = {};
Object.defineProperties(a, {
    one: {enumerable: true, value: 'one'},
    two: {enumerable: false, value: 'two'},
});
Object.keys(a); // ["one"]
Object.getOwnPropertyNames(a); // ["one", "two"]

如果你定义的属性没有提供属性属性描述符(意思是不使用Object.defineProperties),例如:

a.test = 21;

那么这样的属性就会自动成为一个枚举,并且这两个方法都会产生相同的数组

用户回答回答于

另一个区别是数组的情况。Object.getOwnPropertyNames返回一个额外的属性lenth

var x = ["a", "b", "c", "d"];
Object.keys(x);  //[ '0', '1', '2', '3' ]
Object.getOwnPropertyNames(x);  //[ '0', '1', '2', '3', 'length' ]

扫码关注云+社区