Object.getOwnPropertyNames vs Object.keys
2022-08-30 00:14:52
和 在 javascript 中有什么区别?一些例子也将不胜感激。Object.getOwnPropertyNames
Object.keys
和 在 javascript 中有什么区别?一些例子也将不胜感激。Object.getOwnPropertyNames
Object.keys
有一点区别。 返回对象 的所有自己的属性。 返回所有可枚举的自己的属性。这意味着,如果您定义了对象属性而没有创建其中一些属性,这两种方法将为您提供相同的结果。Object.getOwnPropertyNames(a)
a
Object.keys(a)
enumerable: false
测试起来很容易:
var a = {};
Object.defineProperties(a, {
one: {enumerable: true, value: 1},
two: {enumerable: false, value: 2},
});
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' ]