ejemplos - javascript html
Object.getOwnPropertyNames vs Object.keys (3)
Hay una pequeña diferencia. Object.getOwnPropertyNames(a)
devuelve todas las propiedades propias del objeto a
. Object.keys(a)
devuelve todas las propiedades propias enumerables . Significa que si define las propiedades de su objeto sin hacer enumerable: false
alguno de ellos enumerable: false
estos dos métodos le darán el mismo resultado.
Es fácil de probar:
var a = {};
Object.defineProperties(a, {
one: {enumerable: true, value: ''one''},
two: {enumerable: false, value: ''two''},
});
Object.keys(a); // ["one"]
Object.getOwnPropertyNames(a); // ["one", "two"]
Si define una propiedad sin proporcionar el descriptor de atributos de propiedad (lo que significa que no usa Object.defineProperties
), por ejemplo:
a.test = 21;
entonces tal propiedad se convierte en enumerable automáticamente y ambos métodos producen la misma matriz.
¿Cuál es la diferencia entre Object.getOwnPropertyNames
y Object.keys
en javascript? También se apreciarán algunos ejemplos.
Otra diferencia es en el caso de que el método Object.getOwnPropertyNames
de la matriz devuelva una propiedad adicional que es la length
.
var x = ["a", "b", "c", "d"];
Object.keys(x); //[ ''0'', ''1'', ''2'', ''3'' ]
Object.getOwnPropertyNames(x); //[ ''0'', ''1'', ''2'', ''3'', ''length'' ]
Otra diferencia es que (al menos con nodejs) la función "getOwnPropertyNames" no garantiza el orden de las claves, por eso usualmente uso la función "keys":
Object.keys(o).forEach(function(k) {
if (!o.propertyIsEnumerable(k)) return;
// do something...
});