Skip to main content

Command Palette

Search for a command to run...

Understanding the Spread and Rest Operators in JavaScript

Updated
4 min read

Modern JavaScript introduced several features that make code cleaner and easier to write. Two of these features are the spread operator (...) and the rest operator (...).

Although they use the same syntax, they serve different purposes depending on how they are used.

In this article, we will cover:

  • What the spread operator does

  • What the rest operator does

  • The difference between spread and rest

  • Using spread with arrays and objects

  • Practical use cases in real-world JavaScript


The Spread Operator

The spread operator (...) is used to expand elements of an iterable (like arrays or objects) into individual values.

In simple terms:

Spread = Expanding values

Example with Arrays

const numbers = [1, 2, 3];

console.log(...numbers);

Output:

1 2 3

The array elements are expanded into individual values.


Copying an Array

Spread is often used to create a copy of an array.

const arr1 = [1, 2, 3];

const arr2 = [...arr1];

console.log(arr2);

Output:

[1, 2, 3]

This creates a shallow copy of the array.


Merging Arrays

Spread also makes it easy to combine arrays.

const arr1 = [1, 2];
const arr2 = [3, 4];

const merged = [...arr1, ...arr2];

console.log(merged);

Output:

[1, 2, 3, 4]

This approach is cleaner than using older methods like concat().


Spread Operator with Objects

The spread operator can also be used with objects.

Copying Objects

const user = {
  name: "Dipan",
  age: 21
};

const copy = { ...user };

console.log(copy);

Merging Objects

const user = { name: "Dipan" };
const details = { age: 21 };

const profile = { ...user, ...details };

console.log(profile);

Output:

{ name: "Dipan", age: 21 }

The Rest Operator

The rest operator (...) is used to collect multiple values into a single structure.

In simple terms:

Rest = Collecting values


Example with Function Parameters

function sum(...numbers) {
  return numbers.reduce((total, num) => total + num, 0);
}

console.log(sum(1, 2, 3, 4));

Here:

  • All arguments are collected into the numbers array.

Rest with Array Destructuring

const numbers = [1, 2, 3, 4];

const [first, ...rest] = numbers;

console.log(first);
console.log(rest);

Output:

1
[2, 3, 4]

The rest operator collects the remaining elements into an array.


Difference Between Spread and Rest

Even though both use the ... syntax, their behavior depends on the context.

Feature Spread Operator Rest Operator
Purpose Expands elements Collects elements
Usage Arrays, objects, function calls Function parameters, destructuring
Behavior Breaks a structure into values Groups values into a structure

Example comparison:

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

// Rest
function example(...args) {
  console.log(args);
}

Practical Use Cases

The spread and rest operators appear frequently in modern JavaScript applications.

Passing Array Elements as Function Arguments

const numbers = [5, 10, 15];

console.log(Math.max(...numbers));

Updating State in Applications

Spread is often used to create updated objects without mutating the original one.

const user = {
  name: "Dipan",
  age: 21
};

const updatedUser = {
  ...user,
  age: 22
};

This pattern is common in modern frontend frameworks.


Handling Variable Arguments

Rest parameters allow functions to accept any number of arguments.

function logItems(...items) {
  items.forEach(item => console.log(item));
}

logItems("apple", "banana", "mango");

Key Idea: Expanding vs Collecting

The easiest way to remember the difference:

Spread → Expands values
Rest → Collects values

Example:

const numbers = [1, 2, 3];

function example(a, b, c) {}

example(...numbers); // spread
function example(...numbers) {
  console.log(numbers);
}

Conclusion

The spread and rest operators are powerful JavaScript features that simplify working with arrays, objects, and function parameters.

Key points to remember:

  • The spread operator expands elements into individual values

  • The rest operator collects multiple values into one structure

  • Spread is commonly used for copying and merging arrays or objects

  • Rest is commonly used for handling variable function arguments

  • Both features improve code readability and flexibility

Understanding how these operators work will help you write cleaner JavaScript and recognize common patterns used in modern applications.