una tablas tabla recorrer obtener filas ejemplos datos create crear con array agregar javascript firefox google-chrome v8 spidermonkey

tablas - recorrer tabla javascript



Debajo del capó, ¿son los objetos Javascript tablas hash? (2)

Me preguntaba cómo se implementan los Objetos bajo el capó en los motores de Javascript (V8, Spidermonkey, etc.). ¿Son realmente solo tablas de hash? Si es así, ¿cómo manejan las colisiones?


En primer lugar, la respuesta es probablemente algo diferente para diferentes motores JS. Además, supongo que está preguntando específicamente sobre el almacenamiento de la propiedad; obviamente, los objetos tienen un montón de otros estados también (el eslabón de la cadena del prototipo es obvio).

En el caso de Spidermonkey, los objetos básicamente tienen una lista vinculada de pares (propname, información sobre propiedad), hasta que tienen demasiadas propiedades, cuando creo que aún mantienen la lista vinculada (porque el orden es importante para las propiedades en JS en la práctica) pero agregue una tabla hash fuera de banda que asigne nombres de propiedades a entradas en la lista enlazada.

También puede haber otras razones para el cambio a la tabla hash; los detalles no se han fijado con el tiempo y están sujetos a cambios en el futuro.

Las listas enlazadas y las tablas hash en realidad se comparten entre objetos; siempre que dos objetos tengan los mismos nombres de propiedad y la información de propiedad correspondiente (que NO incluye el valor, para propiedades con un valor almacenado) y las propiedades se configuraron en el mismo orden, pueden compartir la lista de propiedades vinculadas.

Los valores de propiedad reales, cuando deben ser almacenados, se almacenan en una matriz en el objeto (o más precisamente, dos matrices; una asignada en línea con el objeto, cuyo tamaño se fija en el momento de creación del objeto, una asignada dinámicamente y redimensionada según sea necesario para las propiedades que se agregan más adelante).


Sí, son tablas hash. No entiendo su parte de colisión, por favor explique la segunda parte de su pregunta.