Spread con Splice

¡Hola a todos!

Tengo la siguiente consulta. Leyendo el este artículo me encuentro con el siguiente código.

var arr = [1, 2, 3];
var arr2 = arr;
arr2.push(4);

console.log(arr2);
// [ 1, 2, 3, 4 ]

console.log(arr);
// [ 1, 2, 3, 4 ]

En este caso, cuando se implementa el método push() a arr2 el cambio afecta también a arr sin embargo cuando se implementa spread no ocurre eso, como se muestra en el siguiente ejemplo.

var arr = [1, 2, 3];
var arr2 = [...arr]; // like arr.slice()
arr2.push(4);

console.log(arr2);
// [ 1, 2, 3, 4 ]

console.log(arr);
// [ 1, 2, 3]

¿Alguien me podría explicar por qué ocurre esto? En el primer caso, si modifico arr2 no se debería modificar arr.

Muchas gracias.

Saludos,
Federico.

Esto ocurre porque al hacer la siguiente operación:

var arr = [1, 2, 3];
var arr2 = arr;

Lo que se está haciendo es asignar a arr2 la referencia de arr.

En javascript los “arreglos” son en verdad objetos, puedes verificar esto de la siguiente manera:

console.log(typeof arr) // 'object'

Esto puede ser bastante raro si vienes de algún otro lenguaje, si no es así, de una vez te aviso que javascript tiene sus cosas raras, o digamosle diferentes.

Pero bueno, al usar:

var arr = [1, 2, 3];
var arr2 = [...arr];

Lo que se está haciendo es copiar los valores del “arreglo” arr a arr2, ya no se está pasando mas la referencia de este.

1 Like

El que sabe, ¡sabe! :upside_down_face:

¡Muchas gracias Max y bienvenido a la comunidad!

Saludos,
Federico.