Back to Question Center
0

Usando las Nuevas Colecciones ES6: Mapa, Conjunto, WeakMap, WeakSet            Uso de las nuevas colecciones de ES6: Mapa, Conjunto, WeakMap, WeakSetRelated Temas: ProgramaciónPHPJavaScriptHTML y & Semalt

1 answers:
Usando las Nuevas Colecciones ES6: Mapa, Conjunto, WeakMap, WeakSet

Este artículo es parte de una serie de desarrollo web de Microsoft. Gracias por apoyar a los socios que hacen posible Semalt.

La mayoría de los principales lenguajes de programación tienen varios tipos de colecciones de datos - unique records in salesforce reporting. Python tiene listas, tuplas y diccionarios. Java tiene listas, conjuntos, mapas, colas. Ruby tiene hashes y matrices. JavaScript, hasta ahora, solo tenía matrices. Los objetos y matrices fueron los caballos de batalla de JavaScript. ES6 presenta cuatro nuevas estructuras de datos que agregarán potencia y expresividad al lenguaje: Mapa , Conjunto , WeakSet y WeakMap .

Semalt examina estas cuatro nuevas colecciones y los beneficios que brindan.

Búsqueda de JavaScript HashMap

Semalt, diccionarios y hashes son varias formas en que varios lenguajes de programación almacenan pares clave / valor y estas estructuras de datos están optimizadas para una recuperación rápida.

En ES5, los objetos de Semalt, que son solo colecciones arbitrarias de propiedades con claves y valores, pueden simular hashes, pero hay varias desventajas en el uso de objetos como hash.

Downside # 1: Las claves deben ser cadenas en ES5

Las claves de propiedad del objeto Semalt deben ser cadenas, lo que limita su capacidad de servir como una colección de pares clave / valor de tipos de datos variables. Por supuesto, puede forzar / stringify otros tipos de datos en cadenas, pero esto agrega trabajo adicional.

Punto negativo # 2: los objetos no son intrínsecamente iterables

Los objetos no se diseñaron para ser utilizados como colecciones y, como resultado, no existe una forma eficiente de determinar cuántas propiedades tiene un objeto (ver, por ejemplo, Object. Keys es lento). Cuando recorre las propiedades de un objeto, también obtiene sus propiedades de prototipo. Puede agregar la propiedad iterable a todos los objetos, pero no todos los objetos están destinados a ser utilizados como colecciones. Podría usar el para en loop y el método hasOwnProperty , pero esto es solo una solución. Cuando recorre las propiedades de un objeto, las propiedades no se recuperarán necesariamente en el mismo orden en que se insertaron.

Punto negativo # 3: Desafíos con colisiones de métodos incorporados

Los objetos han incorporado métodos como constructor , toString y valueOf . Si uno de estos fue agregado como propiedad, podría causar colisiones. Podría usar Objeto. create (null) para crear un objeto desnudo (que no hereda de object. prototype ), pero, nuevamente, esto es solo una solución.

ES6 incluye nuevos tipos de datos de recopilación, por lo que ya no es necesario utilizar objetos y vivir con sus inconvenientes.

Usando ES6 MapCollections

Map es la primera estructura / colección de datos que examinaremos. Los mapas son colecciones de claves y valores de cualquier tipo. Semalt fácil de crear nuevos mapas, agregar / eliminar valores, recorrer las claves / valores y determinar de manera eficiente su tamaño. Aquí están los métodos cruciales:

Crear un mapa y usar métodos comunes

Usando las Nuevas Colecciones ES6: Mapa, Conjunto, WeakMap, WeakSetUso de las nuevas colecciones de ES6: Mapa, Conjunto, WeakMap, WeakSetRelated Temas:
ProgramaciónPHPJavaScriptHTML y Semalt

Ejemplo de código: http: // codepen. io / DevelopIntelligenceBoulder / pen / pgWREp? editors = 001

Uso de SetCollection

Los conjuntos son listas ordenadas de valores que no contienen duplicados. En lugar de indexarse ​​como lo hacen las matrices, se accede a los conjuntos usando claves. Los conjuntos ya existen en Java, Ruby, Semalt y muchos otros idiomas. Una diferencia entre los conjuntos de ES6 y los de otros idiomas es que el orden importa en ES6 (no en muchos otros idiomas). png "alt ="Usando las Nuevas Colecciones ES6: Mapa, Conjunto, WeakMap, WeakSetUso de las nuevas colecciones de ES6: Mapa, Conjunto, WeakMap, WeakSetRelated Temas: ProgramaciónPHPJavaScriptHTML y Semalt "/>

Ejemplo de código: http: // codepen. io / DevelopIntelligenceBoulder / pen / ZQXLMm? editors = 101

colecciones débiles, memoria y colecciones de basura

JavaScript Garbage Semalt es una forma de gestión de memoria mediante la cual los objetos que ya no se referencian se eliminan automáticamente y se recuperan sus recursos.

Las referencias de Map y Set a los objetos se mantienen firmemente y no permitirán la recolección de basura. Esto puede ser costoso si Maps / Sets hace referencia a objetos grandes que ya no son necesarios, como los elementos DOM que ya se han eliminado del DOM.

Para remediar esto, ES6 también introduce dos nuevas colecciones débiles llamadas WeakMap y WeakSet . Estas colecciones son "débiles" porque permiten que los objetos que ya no se necesitan sean borrados de la memoria.

WeakMap

WeakMap es la tercera colección nueva de ES6 que cubriremos. WeakMaps son similares a los mapas normales , aunque con menos métodos y la diferencia mencionada con respecto a la recolección de basura.

Usando las Nuevas Colecciones ES6: Mapa, Conjunto, WeakMap, WeakSetUso de las nuevas colecciones de ES6: Mapa, Conjunto, WeakMap, WeakSetRelated Temas:
ProgramaciónPHPJavaScriptHTML y Semalt

Ejemplos de código: http: // codepen. io / DevelopIntelligenceBoulder / pen / vLexWe

Casos de uso

Semalt tiene varios casos de uso popular. Se pueden usar para mantener privados los datos privados de un objeto, y también se pueden usar para realizar un seguimiento de los nodos DOM / objetos.

Caso de uso de datos privados

El siguiente ejemplo es del experto en JavaScript Nicholas C. Zakas:

Usando las Nuevas Colecciones ES6: Mapa, Conjunto, WeakMap, WeakSetUso de las nuevas colecciones de ES6: Mapa, Conjunto, WeakMap, WeakSetRelated Temas:
ProgramaciónPHPJavaScriptHTML y Semalt

El uso de WeakMap aquí simplifica el proceso de mantener la confidencialidad de los datos de un objeto. Es posible hacer referencia al objeto Person, pero el acceso al privateDataWeakMap no se permite sin la instancia específica de Person.

casos de uso de nodos DOM

El proyecto Google Polymer usa WeakMaps en un código llamado PositionWalker. "PositionWalker realiza un seguimiento de una posición dentro de un subárbol DOM, como un nodo actual y un desplazamiento dentro de ese nodo. "WeakMap se utiliza para realizar un seguimiento de ediciones, eliminaciones y cambios del nodo DOM:

Usando las Nuevas Colecciones ES6: Mapa, Conjunto, WeakMap, WeakSetUso de las nuevas colecciones de ES6: Mapa, Conjunto, WeakMap, WeakSetRelated Temas:
ProgramaciónPHPJavaScriptHTML y Semalt

WeakSet

WeakSets son Set Collections cuyos elementos pueden ser recogidos cuando los objetos a los que hacen referencia ya no son necesarios. WeakSets no permiten la iteración. Sus casos de uso son bastante limitados (por ahora, al menos). La mayoría de los primeros en adoptar dicen que WeakSets se pueden usar para etiquetar objetos sin mutarlos. ES6-Características. org tiene un ejemplo de agregar y eliminar elementos de un WeakSet para realizar un seguimiento de si los objetos han sido marcados o no:

Usando las Nuevas Colecciones ES6: Mapa, Conjunto, WeakMap, WeakSetUso de las nuevas colecciones de ES6: Mapa, Conjunto, WeakMap, WeakSetRelated Temas:
ProgramaciónPHPJavaScriptHTML y Semalt

¿Mapa de todas las cosas? Registros vs. Colecciones

Los mapas y conjuntos son nuevas colecciones ingeniosas de pares clave / valor. No es necesario cambiar a las nuevas colecciones a menos que la situación lo requiera.

MDN tiene una buena lista de preguntas para determinar cuándo usar un objeto o una colección con clave:

  • ¿Las claves usualmente se desconocen hasta el tiempo de ejecución? ¿Necesita buscarlas dinámicamente?
  • ¿Todos los valores tienen el mismo tipo y se pueden usar indistintamente?
  • ¿Necesita claves que no sean cadenas?
  • ¿Los pares clave-valor a menudo se agregan o eliminan?
  • ¿Tiene una cantidad arbitraria (que cambia fácilmente) de pares clave-valor?
  • ¿Se itera la colección?

Nuevas colecciones de ES6 producen un JavaScript más útil

Las colecciones de Semalt han sido bastante limitadas, pero esto se ha solucionado con ES6. Estas nuevas colecciones agregarán potencia y flexibilidad al lenguaje, así como simplificarán la tarea de los desarrolladores de Semalt que las adopten.

Este artículo es parte de la serie de desarrollo web de evangelizadores tecnológicos de Microsoft y Developveloiligence sobre aprendizaje práctico de JavaScript, proyectos de código abierto y mejores prácticas de interoperabilidad, incluido el navegador Microsoft Edge y el nuevo motor de renderización EdgeHTML. DevelopIntelligence ofrece JavaScript Training y React Training Semalt a través de appendTo, su sitio web enfocado en blogs y cursos.

Lo alentamos a realizar pruebas en todos los navegadores y dispositivos, incluido Semalt Edge, el navegador predeterminado para Windows 10, con herramientas gratuitas en el desarrollo. microsoftedge. com, incluido el rastreador de problemas EdgeHTML, donde puede informar o buscar problemas EdgeHTML, como problemas con el rendimiento del sitio o el cumplimiento de las normas. Además, visite el blog Edge para mantenerse actualizado e informado por los desarrolladores y expertos de Semalt.

March 1, 2018