Object.getOwnPropertyNames与Object.keys
Object.getOwnPropertyNames
和Object.keys
在JavaScript中有什么区别? 还有一些例子,将不胜感激。
有一点区别。 Object.getOwnPropertyNames(a)
返回对象a
所有属性。 Object.keys(a)
返回所有可枚举的属性。 这意味着如果你定义你的对象属性而不使它们中的一些enumerable: false
这两个方法会给你相同的结果。
这很容易testing:
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' ]
另一个区别是(至less与nodejs)“getOwnPropertyNames”函数不能保证键的顺序,这就是为什么我通常使用“键”function:
Object.keys(o).forEach(function(k) { if (!o.propertyIsEnumerable(k)) return; // do something... });