tipos principales primitivos primitives example estructuras estructura datos data javascript garbage-collection

principales - ¿Cuándo debo usar eliminar elementos de configuración para null en JavaScript?



tipos de datos principales en javascript (3)

Las propiedades de los objetos JavaScript se implementan normalmente con una tabla hash. Al establecer nulo, la clave de la tabla hash señala un valor nulo, mientras que la eliminación elimina la clave y el valor.

La principal diferencia observable entre los dos es que si itera sobre las teclas con un bucle for..in, la eliminación de claves da como resultado menos entradas vistas por la iteración.

Yo sugeriría que prefiera la eliminación en general, a menos que vaya a configurar y borrar varias veces las mismas teclas, lo que argumentaría a favor de dejar la estructura de la tabla hash en su lugar. Sin embargo, cualquier diferencia de rendimiento entre las dos técnicas será inconmensurablemente pequeña en cualquier caso típico.

-metro@

Posible duplicado:
Eliminar objetos en JavaScript

Tengo un objeto JS que tiene una gran cantidad de propiedades. Si quiero forzar al navegador a recolectar este objeto, ¿necesito establecer cada una de estas propiedades como nulas o necesito usar el operador delete? ¿Cuál es la diferencia entre los dos?


No hay forma de forzar la recolección de basura en JavaScript, y realmente no es necesario. xy = null; y delete xy; ambos eliminan la referencia x al valor anterior de y . El valor será basura recolectada cuando sea necesario.

Si anula una propiedad, aún se considera ''establecida'' en el objeto y se enumerará. La única vez que puedo pensar en dónde preferirías delete es si vas a enumerar las propiedades de x .

Considera lo siguiente:

var foo = { ''a'': 1, ''b'': 2, ''c'': 3 }; console.log(''Deleted a.''); delete foo.a for (var key in foo) console.log(key + '': '' + foo[key]); console.log(''Nulled out b.''); foo[''b''] = null; for (var key in foo) console.log(key + '': '' + foo[key]);

Este código producirá el siguiente resultado:

Deleted a. b: 2 c: 3 Nulled out b. b: null c: 3


No hay forma de forzar la recolección de basura en un momento específico en JavaScript. Cada motor de JavaScript tiene su propia forma de manejar eso.

Sin embargo, lo que puede hacer es asegurarse de que sus objetos no estén referenciados en ninguna parte. Ponerlos a nulo o eliminarlos en realidad están haciendo lo mismo (borrar nunca elimina el objeto, solo elimina una referencia). Cuando la recolección de elementos no utilizados se ejecuta, verifica si hay referencias a un objeto determinado; luego, si no lo hace, lo elimina de la memoria. Aquí es donde se producen fugas de memoria (un objeto JavaScript hace referencia a un objeto DOM, y viceversa).

Asegúrate de eliminar todas las referencias y estarás bien.