JavaScript es un lenguaje de programación basado en elementos con tipos primitivos y no primitivos. Aprender cómo se almacena cada uno de estos elementos nos ayuda a entender mejor la relación entre el lenguaje y nuestra máquina. Por ello, en este post, te enseñaremos cómo se almacenan los tipos no primitivos en JavaScript.
¿Cómo se almacenan los tipos primitivos en JavaScript?
En nuestro post sobre cómo se almacenan los valores primitivos en JavaScript hemos visto que los valores booleanos, strings, números y demás se almacenan siguiendo un orden de slot en la memoria RAM de nuestra máquina. En este tipo de almacenamiento, el sistema usa la etiqueta definida en la variable y almacenan su valor directamente en el slot disponible. Para los tipos no primitivos, el sistema almacena direcciones.
¿Cómo se almacenan los tipos no primitivos en JavaScript?
Para entender cómo se almacenan los tipos no primitivos en JavaScript, te proponemos pensar en un array como el que te mostramos a continuación. Recuerda que un array es una lista de elementos que se crea entre corchetes [ ] y que divide los elementos usando comas.
const match = ['A', 'B']
Para este elemento, el programa debe ser capaz de almacenar en su memoria asignada los valores ‘A’ y ‘B’. Al igual que en el caso de los valores primitivos, la memoria RAM tendrá distintos slots disponibles para almacenar este contenido. Sin embargo, en este caso no se almacenarán los valores directamente.
Supongamos que los slots disponibles dentro de nuestra memoria RAM empiezan con el valor #2301. Entonces, tendremos una etiqueta denominada match que almacenará dentro del espacio #2301 una dirección. Esta dirección nos llevará a donde se almacena el contenido primitivo de nuestro elemento. Pensemos que este elemento se almacena en el slot #2302. A continuación, puedes ver una representación de este ejemplo para entender cómo se almacenan los tipos no primitivos en JavaScript:
Número de slot | Contenido almacenado |
#2301 | => #2302 |
#2302 | ‘A’, ‘B’ |
En el mundo de la programación podemos entender cómo se almacenan los tipos no primitivos en JavaScript con el concepto de punteros. Esto quiere decir que lo que estamos almacenando es una referencia, no el valor directamente. Una vez almacenada esta referencia, los valores primitivos dentro de nuestro array se almacenan dentro del siguiente slot.
Ahora, ¿qué pasa si nuestro elemento no primitivo tiene un valor no primitivo dentro de él? Para entender cómo se almacenan los tipos no primitivos en JavaScript cuando contienen otros valores no primitivos, te proponemos el siguiente ejemplo con un array compuesto de otro array:
const matchDay = [match]
En este caso, el programa creará una nueva variable con la etiqueta matchDay. Esta etiqueta almacenará una dirección hacia el slot #2304 dentro del slot #2303, que es el siguiente disponible. Dentro de este slot no encontraremos valores, pues el array match no es primitivo. Sin embargo, como ya hemos definido un slot para el array match, lo que encontraremos en el slot #2304 será una dirección hacia este. A continuación, te mostramos una representación de este almacenamiento para que lo puedas ver más claramente:
Número de slot | Contenido almacenado |
#2303 | => 2304 |
#2304 | => 2301 |
Ahora que sabes cómo se almacenan los tipos no primitivos en JavaScript, te invitamos a pensar cómo se almacenaría el siguiente elemento, conocido como spread operator:
const newMatchDay = […matchDay]
Ten presente que, en este caso, el spread operator está copiando el contenido de matchDay. Entonces, primero se creará una nueva etiqueta llamada newMatchDay que nos guiará al contenido dentro de matchDay. Recuerda que este contenido está definido en el slot #2304 según esta constante. Por ello, la ruta en la memoria RAM para llegar a este contenido sería la siguiente:
Número de slot | Contenido almacenado |
#2305 | => #2306 |
#2306 | => #2304 |
Como ejemplo final para entender cómo se almacenan los tipos no primitivos en JavaScript, te proponemos un elemento push. Hacer un push en JavaScript es introducir un elemento más en el array. En la línea de código siguiente estamos introduciendo un nuevo elemento en el array match:
match.push ( 'C' )
Entonces, nuestro array match pasa a tener los elementos ‘A’, ‘B’ y ‘C’. Este nuevo elemento queda almacenado igual que los otros en el slot #2302. Al hacer esta modificación, todos los demás arrays que hemos hecho pasan a contener el nuevo elemento, pues sus recorridos de almacenamiento no cambian.
Por último, debes saber que si quieres seguir aprendiendo sobre este lenguaje de programación y todas sus funcionalidades, puedes hacerlo en nuestro Bootcamp Full Stack Web. Allí aprenderás, además de JavaScript, todo lo necesario para convertirte en un Full Stack Developer en pocos meses. ¡No sigas esperando para cumplir tu sueño de ser un desarrollador web e inscríbete ya!