utilizar un bucle for..in
para enumerar las propiedades de un objeto, pero tenga cuidado. La enumeración devolverá propiedades no solo del objeto que se enumera, sino también de los prototipos de cualquier objeto principal.
var myObject = {foo: 'bar'};
for (var name in myObject) {
alert(name);
}
// results in a single alert of 'foo'
Object.prototype.baz = 'quux';
for (var name in myObject) {
alert(name);
}
// results in two alerts, one for 'foo' and one for 'baz'
Para evitar la inclusión de las propiedades heredadas en su enumeración, comprobar hasOwnProperty()
:
for (var name in myObject) {
if (myObject.hasOwnProperty(name)) {
alert(name);
}
}
Editar: no estoy de acuerdo con la declaración de JasonBunting que no es necesario preocuparse por la enumeración de las propiedades heredadas. Hay es peligro en la enumeración de propiedades heredadas que no está esperando, ya que puede cambiar el comportamiento de su código.
No importa si este problema existe en otros idiomas; el hecho es que existe, y JavaScript es particularmente vulnerable ya que las modificaciones al prototipo de un objeto afectan a los objetos secundarios incluso si la modificación tiene lugar después de la creación de instancias.
Es por eso que JavaScript proporciona hasOwnProperty()
, y esta es la razón por la que debe usarlo para asegurarse de que el código de terceros (o cualquier otro código que pueda modificar un prototipo) no rompa el suyo. Además de agregar algunos bytes adicionales de código, no hay inconveniente en usar hasOwnProperty()
.
La fecha no importa al elegir duplicados. La mejor pregunta permanece abierta, la otra se cierra como el duplicado. – meagar