Soy un programador C/C++/Java que trabaja con JavaScript.Javascript 'eliminar' no funciona dentro del ciclo iterativo
Estoy intentando escribir una función que eliminará todas las propiedades de un objeto 'obj'. He leído la publicación en "How to quickly clear a Javascript Object?" y vi que hay dos respuestas: (1) crear un nuevo 'obj' (que no quiero hacer porque mi código es un programa de alto rendimiento que se ejecuta en un navegador móvil) , y quiero minimizar la recolección de basura); y (2) iterar sobre las propiedades de un objeto en un bucle y eliminar las propiedades. Este último enfoque no funciona en Chrome 12.
Considere el siguiente código:
var foo = {};
foo['baz'] = 'bar';
console.log("1. foo.baz = " + foo.baz);
delete foo.baz;
console.log("2. foo.baz = " + foo.baz);
foo['baz'] = 'bar';
console.log("3. foo.baz = " + foo.baz);
for (prop in foo)
{
if (foo.hasOwnProperty(prop))
{
console.log("deleting property " + prop);
delete foo.prop;
}
}
console.log("4. foo.baz = " + foo.baz);
Esto produce el siguiente resultado en mi consola en Chrome 12:
1. foo.baz = bar
2. foo.baz = undefined
3. foo.baz = bar
deleting property baz
4. foo.baz = bar
Por qué no funciona foo.baz obtener eliminado dentro del bucle?
(1) Tenía la impresión de que la notación de propiedad foo.prop y foo [prop] eran equivalentes, por ejemplo, como se menciona en http://www.jibbering.com/faq/faq_notes/square_brackets.html. (2) ¿Por qué funciona "delete foo.baz" en mi ejemplo? (3) Como mencioné, quiero minimizar la recolección de basura ya que estoy trabajando en un navegador móvil. – stackoverflowuser2010
'foo.prop' es equivalente a' foo ["prop"] '. ¿ver la diferencia? Si desea extraer dinámicamente una propiedad de 'foo', debe usar' foo [prop] '. – digitalbath
@ stackoverflowuser2010: Pondría más fe en el GC. Si no crea una tonelada de objetos en cada clic, debería estar bien. ¡Eliminar explícitamente todas las propiedades y luego agregar nuevas puede tomar más tiempo que simplemente crear una nueva y dejar la anterior en el GC! – delnan