--- title: Object.getOwnPropertyNames() slug: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames translation_of: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames original_slug: Web/JavaScript/Referencia/Objetos_globales/Object/getOwnPropertyNames ---
El método Object.getOwnPropertyNames() devuelve un array con todas las propiedades (numerables o no) encontradas en un objeto dado.
Object.getOwnPropertyNames(obj)
Object.getOwnPropertyNames devuelve un array cuyos elementos son strings correspondientes a cada una de las propiedades encontradas directamente en obj. El orden de las propiedades numerables en el array coincide con el expuesto para for...in loop (o para {{jsxref("Object.keys")}}) con respecto a las propiedades del object. El orden de las propiedades no-numerables del array, y de éstas respecto a las numerables, no está definido.
var arr = ["a", "b", "c"];
print(Object.getOwnPropertyNames(arr).sort()); // imprime "0,1,2,length"
// Objeto similar a Array
var obj = { 0: "a", 1: "b", 2: "c"};
print(Object.getOwnPropertyNames(obj).sort()); // imprime "0,1,2"
// Imprime nombres de variables y valores usando Array.forEach
Object.getOwnPropertyNames(obj).forEach(function(val, idx, array) {
print(val + " -> " + obj[val]);
});
// imprime
// 0 -> a
// 1 -> b
// 2 -> c
// propiedad no-numerable
var my_obj = Object.create({}, { getFoo: { value: function() { return this.foo; }, enumerable: false } });
my_obj.foo = 1;
print(Object.getOwnPropertyNames(my_obj).sort()); // imprime "foo, getFoo"
Si se quiere solo las propiedades numerables, ver {{jsxref("Object.keys")}} o usar un for...in loop (aunque esto devolvería propiedades numerables no directas del objeto pertenecientes a la cadena de prototype a la que pertenezca, a menos que finalmente se filtre con hasOwnProperty()).
Items de la cadena prototype no se listan:
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"]
)
)
Aquí se usa la función Array.prototype.filter para quitar las keys numerables (obtenidas con Object.keys) de una lista con todas las keys (obtenida con Object.getOwnPropertynames) dejando solo las no-numerables.
var target = myObject;
var enum_and_nonenum = Object.getOwnPropertyNames(target);
var enum_only = Object.keys(target);
var nonenum_only = enum_and_nonenum.filter(function(key) {
var indexInEnum = enum_only.indexOf(key)
if (indexInEnum == -1) {
//no encontrada en las keys de enum_only, por lo que se trata de una key numerable, se devuelve true para mantenerla en filter
return true;
} else {
return false;
}
});
console.log(nonenum_only);
| Especificación | Status | Comentario |
|---|---|---|
| {{SpecName('ES5.1', '#sec-15.2.3.4', 'Object.getOwnPropertyNames')}} | {{Spec2('ES5.1')}} | Initial definition. Implemented in JavaScript 1.8.5 |
| {{SpecName('ES6', '#sec-object.getownpropertynames', 'Object.getOwnPropertyNames')}} | {{Spec2('ES6')}} |
| 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 | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
Based on Kangax's compat table.
Object.getOwnPropertyNames did not see unresolved properties of {{jsxref("Error")}} objects. This has been fixed in later versions ({{bug("724768")}}).