Object.getOwnPropertyNames与Object.keys
Object.getOwnPropertyNames
和Object.keys
在JavaScript中有什么区别? 还有一些例子值得赞赏。
有一点区别。 Object.getOwnPropertyNames(a)
返回对象a
所有属性。 Object.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
方法将返回一个额外的length
属性。
var x = ["a", "b", "c", "d"];
Object.keys(x); //[ '0', '1', '2', '3' ]
Object.getOwnPropertyNames(x); //[ '0', '1', '2', '3', 'length' ]
另一个区别是(至少与nodejs)“getOwnPropertyNames”函数不能保证键的顺序,这就是为什么我通常使用“键”功能:
Object.keys(o).forEach(function(k) {
if (!o.propertyIsEnumerable(k)) return;
// do something...
});
链接地址: http://www.djcxy.com/p/31741.html
上一篇: Object.getOwnPropertyNames vs Object.keys
下一篇: Is object empty?