Los arrays de JavaScript y la memoria RAM

Autor: | Última modificación: 27 de julio de 2022 | Tiempo de Lectura: 3 minutos
Temas en este post:

Aprender a programar es mucho más que saber sobre los distintos elementos y lenguajes de programación, ya que también requiere entender cómo afectan a la web que estamos creando y a la máquina que nos permite visualizarla. Por ello, en este post, te enseñaremos cómo interactúan dos elementos importantes de este proceso: los arrays de JavaScript y la memoria RAM.

¿Cómo se almacena nuestro código?

Antes de enseñarte exactamente qué sucede entre los arrays de JavaScript y la memoria RAM de nuestra máquina, te invitamos a leer nuestros posts sobre cómo se almacenan los tipos de valores primitivos y los tipos no primitivos de JavaScript en la RAM de nuestro ordenador. Allí aprenderás cómo se diferencia el almacenamiento de estos dos tipos de elementos y por qué toma más espacio almacenar un tipo no primitivo, como un array, que un tipo primitivo, como un número.

En resumen, la diferencia es que los tipos de valores primitivos se almacenan directamente dentro de un slot bajo la etiqueta que le hemos dado a nuestras variables. Es decir. en un solo slot de nuestra memoria RAM se almacena el valor. En el caso de los elementos de tipos no primitivos, como lo son los arrays, la memoria RAM almacena primero una dirección hacia otro slot, en el que sí encontraremos los valores primitivos que conforman nuestro array. Esto se complica aún más cuando empezamos a hablar de almacenar una referencia a un array, pues esta, además, almacena una dirección al contenido original.

A continuación, te explicaremos de forma más específica cómo interactúan los arrays de JavaScript y la memoria RAM de nuestra máquina cuando utilizamos el spread operator de JavaScript.

¿Qué es el spread operator de JavaScript?

El spread operator de JavaScript es un símbolo que nos permite crear una operación en la que se copian los contenidos de un array en una nueva ubicación, normalmente otro array. Entonces, supongamos que tenemos la constante a que ves a continuación:

const a = [1, 2]

Los contenidos de esta constante pueden copiarse y mezclarse con los contenidos de la constante b de la siguiente manera:

const b = […a, 3, 4]

Esta línea de código es básicamente escribir lo siguiente:

const b = […[1,2], 3, 4]

Sin embargo, internamente, el programa se encarga de eliminar los puntos y los corchetes de la copia para darnos el siguiente resultado:

const b = [1,2,3, 4]

¿Cómo interactúan los arrays de JavaScript y la memoria RAM?

Utilizar el spread operator para copiar los contenidos de nuestros elementos tiene una incidencia en cómo interactúan los arrays de JavaScript y la memoria RAM. Aunque un spread operator utiliza como referencia al array del que estamos copiando un contenido, este array es independiente del nuevo elemento creado. Esto quiere decir que los cambios que hagamos en el segundo elemento no afectan al array original, pues el segundo elemento copia e independiza los contenidos.

Por ejemplo, supongamos que tenemos el siguiente array:

let arr1 = [‘a’, ‘b’, ‘c’];

Y lo copiamos dentro de la siguiente variable:

let arr2 = […arr1]

Entonces, si decidimos agregar contenido a nuestro segundo elemento, el contenido original no será afectado.

arr2.push (d) // [‘a,’, ‘b’, ‘c’, ‘d’]

Esto es diferente a cuando se crea una asignación, pues en estas ambos elementos estarían apuntando a la misma referencia. Con un spread operator, cada elemento tiene un contenido independiente que se almacena en slots distintos. Entonces ¿cómo se ve esto en la memoria RAM? A continuación te presentamos un diagrama:

Array ContenidoSlot
arr1#002#001
a,b#002
arr2#004#003
a, b#004
Representación de cómo se distribuye el almacenamiento de arrays con spread operator

Esta distribución sería diferente si tuviéramos la siguiente asignación:

arr3 = arr1

Entonces, esta asignación se almacenaría de la siguiente manera, usando como referencia arr1:

arr3#006#005
#001#006

En este orden de ideas, si agregamos un elemento al arr1, afectaremos el contenido de este y de arr3, pero el contenido de arr2 no se ve afectado, pues se ha escrito para ser independiente. Lo mismo sucede si generamos modificaciones en arr3, como este apunta al mismo punto de memoria, afectaríamos también a arr1.

Ya que sabes cómo se diferencian estos dos métodos de copiar contenido, te recomendamos ser consciente de qué variables estás o no afectando cuando modifiques tu código. Aunque la herramienta spread operator puede ser muy útil, también es un arma de doble filo al desenlazar los contenidos uno de otro.

¿Quieres seguir aprendiendo?

Ahora que has aprendido cómo interactúan los arrays de JavaScript y la memoria RAM, puedes utilizar este conocimiento para escribir un código más eficiente con tu máquina y mejorar tus habilidades de programación. Si, además, quieres seguir aprendiendo a dominar este y muchos otros lenguajes de programación para la web, como CSS y HTML, te invitamos a ser parte de nuestro Desarrollo Web Full Stack Bootcamp, con el que en pocos meses te convertirás en un experto del desarrollo web. ¡No te pierdas esta oportunidad e inscríbete ahora!

👉 Descubre más del Desarrollo Web Full Stack Bootcamp ¡Descarga el temario!

👉 Prueba el Bootcamp Gratis por una Semana ¡Empieza ahora mismo!

👉 Conoce nuestros otros Bootcamps en Programación y Tecnología

[email protected]

¿Sabías que hay más de 40.000 vacantes para desarrolladores de software sin cubrir en España? 

En KeepCoding llevamos desde 2012 guiando personas como tú a áreas de alta empleabilidad y alto potencial de crecimiento en IT con formación de máxima calidad.

 

Porque creemos que un buen trabajo es fuente de libertad, independencia, crecimiento y eso ¡cambia historias de vida!


¡Da el primer paso! 

¿Sabías que hay más de 40.000 vacantes para desarrolladores web sin cubrir en España? 

En KeepCoding llevamos desde 2012 guiando personas como tú a áreas de alta empleabilidad y alto potencial de crecimiento en IT con formación de máxima calidad.

 

Porque creemos que un buen trabajo es fuente de libertad, independencia, crecimiento y eso ¡cambia historias de vida!


¡Da el primer paso!