Operador spread en JavaScript: ¿Qué es y para que sirve?
El operador spread (…), una característica introducida en ES6, es una herramienta muy útil en JavaScript que nos permite expandir elementos iterables como arrays y objetos en lugares donde se esperan múltiples argumentos o elementos. Descubre cómo usar este operador para simplificar tu código y realizar tareas como copiar arrays, concatenarlos, o pasar argumentos a funciones de manera más eficiente.

Índice
1. ¿Qué es el operador spread en JavaScript?
El operador spread (...) es una característica muy poderosa introducida en ES6. Su función principal es «expandir» elementos de un array, objeto o cualquier iterable en lugares donde se esperan múltiples elementos, como argumentos en una función o elementos en un nuevo array.
Imagina que tienes un array y quieres convertir cada elemento de ese array en un argumento individual para una función. ¡Ahí es donde entra en juego el operador spread!
¿QUÉ SERÍA UN ITERABLE?
Imagina un iterable como una colección ordenada de elementos, como un tren con vagones. Cada vagón representa un elemento, y el tren entero es el iterable. En JavaScript, los iterables son objetos que implementan el método Symbol.iterator, lo que significa que pueden ser recorridos de manera secuencial.
Ejemplos de iterables:
- Arrays: La forma más común de iterable. Un array es una colección ordenada de elementos, donde cada elemento tiene un índice.
- Strings: Los strings también son iterables, ya que cada carácter puede ser considerado un elemento.
- Objetos: Aunque los objetos no son iterables por defecto, podemos convertirlos en iterables utilizando métodos como
Object.keys(),Object.values()oObject.entries().
¿Y porqué se los denomina iterables?
Porque nos permiten iterar (repetir un proceso varias veces) sobre cada uno de sus elementos, lo cual implica visitar cada uno de esos elemento de manera ordenada, uno tras otro, para realizar alguna acción especifica sobre cada uno de ellos.
Bien, al inicio dijimos que el operador spread nos permite «expandir» los elementos de un iterable. Pero…. ¿A QUE SE REFIERE CON EXPANDIR?
Esto significa:
- Tomar cada elemento de un iterable y separarlo de los demás.
- Colocar cada uno de estos elementos individualmente en un nuevo contexto, como:
- Pasar argumentos de una función: Pasar cada elemento como un argumento separado.
- Elementos de un nuevo array: Crear un nuevo array con los elementos expandidos.
- Propiedades de un nuevo objeto: Asignar cada elemento como una propiedad de un objeto.
2. Ejemplo de uso del operador spread.
Teniendo en cuenta el punto anterior, vamos a ver un ejemplo de cómo combinar varios arrays en uno solo utilizando el operador spread múltiples veces:
// Supongamos que tenemos estos 3 arreglos o arrays
const frutas = ['manzana', 'banana'];
const verduras = ['lechuga', 'tomate'];
const otros = ['agua', 'pan'];
// Combinamos todos los arrays en uno solo con el operador spread
const todosLosProductos = [...frutas, ...verduras, ...otros];
// El resultado será
console.log(todosLosProductos); // Output: ['manzana', 'banana', 'lechuga', 'tomate', 'agua', 'pan']
Lenguaje del código: JavaScript (javascript)
Explicación:
- Declaración de arrays:
- Creamos tres arrays:
frutas,verdurasyotros.
- Creamos tres arrays:
- Combinación con spread:
- Utilizamos el operador spread (
...) para «expandir» cada array dentro de la creación del nuevo arraytodosLosProductos. - Cada vez que usamos
..., estamos tomando todos los elementos del array correspondiente y colocándolos uno a continuación del otro en el nuevo array.
- Utilizamos el operador spread (
- Resultado:
- El array
todosLosProductosahora contiene todos los elementos de los tres arrays originales, en el orden en que fueron especificados.
- El array
NOTA!!!! Si te animas y deseas ver el resultado de este ejemplo y de todos los que iremos proporcionando directamente desde tu PC, te invito a seguir estos pasos.
- Primero, revisa el punto 5 del siguiente artículo sobre como usar e instalar VSCode (este es el editor de código mas usado), donde encontrarás los pasos para crear la estructura necesaria para visualizar una página desde tu navegador predeterminado.
- Si entendiste correctamente este paso anterior, sabrás donde colocar el código
scriptque te acabamos de proporcionar (arriba). Ahora, puedes visualizar el resultado, para ello puedes hacer lo siguiente:- Una vez abierta y visualizada la página, abre la consola del navegador presionando la tecla F12.
- Ahora, dirígete a la pestaña que dice
Console, y desde aquí podrás ver el resultado del script que hayamos introducido anteriormente.
- No te preocupes, estos pasos son más simples de lo que parecen!!!! Entonces… cada vez que dejemos un código de ejemplo como éste, puedes seguir estos pasos y ver los resultados por ti mismo. ¡Ojalá te animes!!!!
¿Por qué es útil?
- Concisión: Es una forma más concisa y legible de concatenar arrays en comparación con métodos como
concat(). - Flexibilidad: Puedes combinar cualquier número de arrays, incluso si tienen diferentes longitudes.
- Claridad: El código es más fácil de entender, ya que la intención es clara: estamos combinando los elementos de varios arrays.
3. ¿Cómo usar el operador spread en JS?.
Pasos para utilizar el operador spread:
- Identifica el iterable:
- Ejemplo: En el código
const frutas = ['manzana', 'banana'];,frutases un iterable (un array).
- Ejemplo: En el código
- Coloca el operador spread:
- Sintaxis: Se representa con tres puntos suspensivos (
...). - Ubicación: Se coloca justo antes del iterable que quieres expandir.
- Función: Indica que quieres «desempaquetar» los elementos del iterable (el array en este caso).
- Ejemplo: En
const nuevasFrutas = [...frutas];, los tres puntos antes defrutasindican que queremos tomar cada elemento defrutasy colocarlo individualmente ennuevasFrutas.
- Sintaxis: Se representa con tres puntos suspensivos (
- Asigna el resultado a una variable o utilízalo directamente:
- Asignación: El resultado de la expansión suele asignarse a una nueva variable para poder utilizarlo posteriormente.
- Uso directo: También puedes utilizar el resultado directamente dentro de una expresión o llamada a una función.
- Ejemplo: En
const nuevasFrutas = [...frutas];, estamos asignando el resultado de la expansión a la variablenuevasFrutas.
Ejemplo completo:
// Tenemos el siguiente array
const frutas = ['manzana', 'banana'];
// Expandimos el array con el spread y asignamos el resultado a una nueva variable
const nuevasFrutas = [...frutas, 'pera'];
// Usamos el resultado directamente en una función como argumento
function mostrarFrutas(fruta1, fruta2, fruta3) {
console.log(fruta1, fruta2, fruta3);
}
mostrarFrutas(...nuevasFrutas); // Output: manzana banana pera
Lenguaje del código: JavaScript (javascript)
En resumen:
- El operador spread nos permite tomar los elementos individuales de un iterable y utilizarlos en diferentes contextos.
- Asignación: Es común asignar el resultado de la expansión a una nueva variable para poder manipularlo posteriormente.
- Uso directo: También puedes utilizar el resultado directamente en expresiones, llamadas a funciones, etc.
¿Por qué es útil asignar a una variable?
- Reutilización:
- Puedes utilizar el resultado de la expansión en múltiples partes de tu código.
- Modificaciones:
- Puedes modificar el nuevo array o objeto sin afectar al original.
- Claridad:
- Hace que el código sea más legible y comprensible.
¿EN QUE OTROS ITERABLES PODEMOS USAR EL OPERADOR SPREAD EN JAVASCRIPT?
Si bien los arrays son los iterables más comunes donde se utiliza el operador spread, en JavaScript existen otros tipos de iterables en los que también podemos aplicarlo.
Aquí vemos otros iterables donde puedes usar el operador spread, con ejemplos y su respectiva asignación a una variable:
- Strings: Cada carácter de un string puede ser considerado como un elemento de un iterable. Al aplicar el operador spread a un string, obtenemos un array de caracteres.
const saludo = "Hola";
const letras = [...saludo]; // letras será ['H', 'o', 'l', 'a']Lenguaje del código: JavaScript (javascript)
- Objetos (con ciertas restricciones): Aunque los objetos no son iterables por defecto, puedes usar el operador spread para copiar propiedades de un objeto a otro. Sin embargo, hay que tener en cuenta que:
- Solo propiedades enumerables: El operador spread copia solo las propiedades enumerables de un objeto.
- Orden no garantizado: El orden en el que se copian las propiedades no está garantizado, ya que los objetos no tienen un orden definido para sus propiedades.
- Ejemplo:
const persona = { nombre: 'Juan', edad: 30 };
const nuevaPersona = { ...persona, ciudad: 'Madrid' };Lenguaje del código: JavaScript (javascript)
- Sets: Los sets son colecciones de valores únicos. Al aplicar el operador spread a un set, obtenemos un array con los elementos del set.
- Maps: Los maps son estructuras de datos que almacenan pares clave-valor. Al aplicar el operador spread a un map, obtenemos un array de arrays, donde cada subarray contiene una clave y un valor.
Limitaciones:
- Objetos: Como mencioné, el operador spread con objetos tiene algunas limitaciones en cuanto al orden de las propiedades y las propiedades no enumerables.
- Iteradores personalizados: Aunque el operador spread funciona con muchos iterables predefinidos en JavaScript, puede que no funcione con todos los iteradores personalizados.
4. ¿Para que sirve el operador spread en JavaScript?
A continuación dejamos algunos ejemplos útiles en los cuales sirve usar este operador:
4.1. Copiar arrays o concatenarlos
const numeros = [1, 2, 3];
const copiaNumeros = [...numeros]; // Crea una copia exacta del array
console.log(copiaNumeros); // [1, 2, 3]
const masNumeros = [...numeros, 4, 5];
console.log(masNumeros); // [1, 2, 3, 4, 5]Lenguaje del código: JavaScript (javascript)
Explicación:
- Copiar arrays:
Al usar el operador spread (...numeros), estás «desempaquetando» todos los elementos del arraynumerosy colocándolos en un nuevo array. Esto crea una copia superficial (shallow copy), es decir, copia los valores, pero no referencia al array original. Así, puedes modificarcopiaNumerossin afectar anumeros. - Concatenar:
En el caso demasNumeros, se combina el contenido del arraynumeroscon los valores adicionales4y5. El operador spread es útil para crear nuevos arrays sin necesidad de usar métodos comoconcat.
Casos en la prÁctica real donde es comÚn copiar arrays o concatenarlos:
- Copiar arrays: Duplicar datos para pruebas o para trabajar con una versión sin alterar el original, como una lista de productos antes de aplicar un filtro o una ordenación.
- Concatenar: Crear un nuevo array de datos, por ejemplo, al combinar productos de distintas categorías en un catálogo.
4.2. Combinar objetos
const persona = { nombre: 'Manuel', edad: 35 };
const direccion = { ciudad: 'Quilmes', pais: 'Argentina' };
const perfilCompleto = { ...persona, ...direccion };
console.log(perfilCompleto);
// { nombre: 'Manuel', edad: 35, ciudad: 'Quilmes', pais: 'Argentina' }Lenguaje del código: JavaScript (javascript)
Explicación:
- El operador spread «descompone» cada propiedad del objeto
personay las inserta en el nuevo objetoperfilCompleto. Luego, hace lo mismo con las propiedades del objetodireccion. - Si hay propiedades con el mismo nombre en ambos objetos, la última sobrescribe las anteriores. Por ejemplo:
const persona = { nombre: 'Manuel', edad: 35 };
const direccion = { nombre: 'Alejandro', ciudad: 'Quilmes' };
const perfilCompleto = { ...persona, ...direccion };
console.log(perfilCompleto);
// { nombre: 'Alejandro', edad: 35, ciudad: 'Quilmes' }Lenguaje del código: JavaScript (javascript)
Esto es ideal para fusionar o actualizar objetos de manera limpia y sin mutar los originales.
Casos en la prÁctica real donde es común combinar objetos:
- Fusionar datos de un formulario de usuario (datos personales y dirección) antes de enviarlos a un backend para su procesamiento.
- Actualizar un estado en React, por ejemplo, añadir información adicional a un estado existente sin sobreescribirlo completamente.
4.3. Pasar argumentos a una función
const numeros = [3, 5, 7];
console.log(Math.max(...numeros)); // 7Lenguaje del código: JavaScript (javascript)
Explicación:
- El método
Math.maxespera recibir varios argumentos separados por comas (por ejemplo,Math.max(3, 5, 7)). - Usando el operador spread, el array
numerosse «expande» en los elementos individuales3,5y7, lo que permite pasar el array completo como si fueran múltiples argumentos. - Esto es muy útil cuando no sabes cuántos elementos tendrá el array, ya que evita escribirlos manualmente.
Casos en la prÁctica real donde es común pasar argumentos a una función:
- Pasar un array dinámico de precios a
Math.minoMath.maxpara obtener el precio mínimo o máximo en una tienda en línea. - Utilizarlo en una función personalizada para calcular promedios o estadísticas a partir de valores almacenados en arrays.
4.4. Convertir strings en arrays
const palabra = 'JavaScript';
const letras = [...palabra];
console.log(letras);
// ['J', 'a', 'v', 'a', 'S', 'c', 'r', 'i', 'p', 't']Lenguaje del código: JavaScript (javascript)
Explicación:
- Las cadenas de texto (
string) son iterables, lo que significa que puedes usar el operador spread para descomponer cada carácter de la cadena en elementos individuales dentro de un array. - En este caso,
...palabradescompone'JavaScript'en['J', 'a', 'v', 'a', 'S', 'c', 'r', 'i', 'p', 't']. - Esto es útil para manipular cada carácter de un string como si fuera un elemento separado, lo cual sería más difícil con métodos tradicionales.
Casos en la prÁctica real donde es común convertir strings en arrays:
- Descomponer una palabra ingresada por un usuario para analizarla, por ejemplo, verificar si contiene caracteres específicos en un validador de contraseñas.
- Crear animaciones de texto donde cada carácter se convierte en un elemento HTML separado.
4.5. Eliminar elementos sin mutar el original
const numeros = [1, 2, 3, 4];
const sinPrimerElemento = [...numeros.slice(1)];
console.log(sinPrimerElemento); // [2, 3, 4]Lenguaje del código: JavaScript (javascript)
Explicación:
- Aquí usamos
slice(1)para obtener una porción del arraynumerosque excluye el primer elemento.slicedevuelve un nuevo array desde el índice indicado (1en este caso) hasta el final. - Luego, el operador spread (
...) se utiliza para crear un nuevo arraysinPrimerElementoque contiene únicamente los elementos resultantes delslice. - Esto respeta el principio de inmutabilidad, ya que el array original
numerospermanece intacto.
Casos en la prÁctica real donde es común eliminar elementos sin mutar el original:
- Eliminar el primer elemento de una cola de tareas sin modificar el array original.
- Crear un nuevo array que excluya ciertos elementos específicos, por ejemplo, en un sistema de filtros dinámicos para una lista de productos.
5. Preguntas frecuentes y resumen sobre el operador spread en JS.
El operador spread (...) permite expandir elementos de arrays u objetos en lugares donde se esperan valores individuales. Se usa para copiar, combinar arrays/objetos y pasar argumentos a funciones de manera flexible y concisa.
El operador ... desglosa los elementos de un array en una nueva estructura. Ejemplo: console.log(...[1, 2, 3]); imprimirá 1 2 3. También se usa en asignaciones: const arr = [1, ...otrosValores, 4];.
Para clonar un array sin modificar el original, se usa const copia = [...original];. Ejemplo: const nums = [1, 2, 3]; const copiaNums = [...nums];. Esto evita la referencia directa al mismo array, asegurando independencia entre ellos.
El operador ... permite fusionar arrays sin usar concat(). Ejemplo: const arr1 = [1, 2], arr2 = [3, 4]; const combinado = [...arr1, ...arr2];. Esto genera un nuevo array sin modificar los originales.
Permite expandir un array como argumentos individuales en funciones. Ejemplo: const nums = [3, 5, 1]; console.log(Math.max(...nums));. Así, Math.max recibe valores individuales en lugar del array completo.
Se usa para crear copias independientes de objetos: const obj = { a: 1, b: 2 }; const copia = { ...obj };. Esto evita modificar el original, aunque solo funciona para clonación superficial, no en estructuras anidadas.
Permite fusionar propiedades de múltiples objetos. Ejemplo: const obj1 = { a: 1 }, obj2 = { b: 2 }; const combinado = { ...obj1, ...obj2 };. Si hay claves repetidas, el último objeto sobrescribe los valores anteriores.
Ambos usan ..., pero spread expande elementos (arrays u objetos) en otro lugar, mientras que rest los agrupa en un array. Ejemplo: function suma(...nums) {} usa rest para recolectar argumentos en un array.
Simplifica la manipulación de arrays y objetos, permite copiar y combinar estructuras sin mutarlas, y mejora la legibilidad del código. Además, evita métodos más largos como concat() o Object.assign(), haciendo el código más claro.
El spread realiza una clonación superficial, por lo que estructuras anidadas siguen compartiendo referencia. Además, en objetos, propiedades duplicadas son sobrescritas. En arrays grandes, usar spread puede afectar la eficiencia.
