Los arrays de JavaScript y la memoria RAM

Autor: | Última modificación: 11 de mayo de 2023 | Tiempo de Lectura: 3 minutos
Temas en este post:

Algunos de nuestros reconocimientos:

Premios KeepCoding

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!

Posts Relacionados

¡CONVOCATORIA ABIERTA!

Desarrollo Web

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado