Skip to main content

Command Palette

Search for a command to run...

Spread vs Rest Operators in JavaScript: Stop Confusing Them

Updated
4 min readView as Markdown
Spread vs Rest Operators in JavaScript: Stop Confusing Them
D

I am a developer learning web development , I am a college dropout pursuing my passion in software field

Most beginners mess this up — and honestly, it’s because both operators use the same syntax: ....

But here’s the truth:

  • Spread = expands values

  • Rest = collects values

If you don’t understand that distinction deeply, you’ll keep getting confused in real-world code.

Let’s fix that properly.


What Spread Operator Does

The spread operator (...) takes an iterable (like an array or object) and expands it into individual elements.

Simple Example

const arr = [1, 2, 3];

console.log(...arr); // 1 2 3

It literally "spreads" the values out.


Using Spread with Arrays

Copying Arrays

Before (wrong way – mutation risk)

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

After (correct way)

const arr2 = [...arr1];

Merging Arrays

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

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

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

Adding Elements

const arr = [2, 3];

const newArr = [1, ...arr, 4];

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

Using Spread with Objects

Copying Objects

const user = { name: "Deepanshu", age: 19 };

const copy = { ...user };

Merging Objects

const user = { name: "Deepanshu" };
const details = { age: 19 };

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

Overriding Values

const user = { name: "Deepanshu", age: 19 };

const updated = { ...user, age: 20 };

What Rest Operator Does

The rest operator (...) does the opposite — it collects multiple values into a single array or object.


Rest in Function Parameters

Example

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

sum(1, 2, 3, 4); // 10

Here:

  • ...numbers collects all arguments into an array

Rest with Array Destructuring

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

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

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

Rest with Object Destructuring

const user = {
  name: "Deepanshu",
  age: 19,
  country: "India"
};

const { name, ...rest } = user;

console.log(name); // Deepanshu
console.log(rest); // { age: 19, country: "India" }

Differences Between Spread and Rest

Feature Spread Operator Rest Operator
Purpose Expands values Collects values
Usage Arrays, Objects, Function calls Function params, destructuring
Direction One → Many Many → One

Expand vs Collect (Core Idea)

If you don’t get this, you don’t get the topic.

  • ... in spread → breaks things apart

  • ... in rest → groups things together

Example

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

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

Practical Use Cases

1. Avoid Mutation (Huge in Real Projects)

const state = { count: 0 };

const newState = { ...state, count: 1 };

Used heavily in React and state management.


2. Flexible Function Arguments

function logAll(...args) {
  args.forEach(arg => console.log(arg));
}

3. Clean Data Extraction

const user = {
  id: 1,
  name: "Deepanshu",
  password: "secret"
};

const { password, ...safeUser } = user;

console.log(safeUser);

4. Combining API Data

const apiData = { id: 1, name: "Deepanshu" };

const finalData = { ...apiData, isLoggedIn: true };

Where You’ll Mess Up (Be Honest)

  • Using spread inside function params (wrong context)

  • Forgetting rest must be the last element

// ❌ Wrong
const [...rest, last] = arr;

// ✅ Correct
const [first, ...rest] = arr;
  • Confusing object vs array usage

Final Take

This is not a “syntax topic.” This is a thinking pattern:

  • Spread → expand data

  • Rest → collect data

If you still confuse them after this, you're not practicing enough — not a concept issue.


If you want next:

  • I can give you real interview questions on this

  • Or show how this is used in backend + React codebases

Your move.

1 views