Skip to main content

Command Palette

Search for a command to run...

Spread vs Rest in JavaScript: Same Syntax, Totally Different Powers

Updated
4 min read
Spread vs Rest in JavaScript: Same Syntax, Totally Different Powers

Why do developers get confused?

If you’ve ever seen ... in JavaScript, you probably thought:

“Wait… is this spread or rest?”

The tricky part is:
👉 Both spread and rest use the same syntax (...)

But they do completely opposite things.


🧠 The simplest way to understand

Spread = Expand values
Rest = Collect values

That’s it.
Everything else builds on this idea.


🎯 Real-life analogy

Think of ... like handling clothes 👕

  • Spread → Taking clothes out of a bag and laying them out

  • Rest → Putting scattered clothes into one bag


What is the Spread Operator?

The spread operator is used to expand elements.


Example with arrays

const arr = [1, 2, 3];

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

It “spreads” the elements into a new array


Visual

[1, 2, 3]
   ↓ spread
1, 2, 3

Copying arrays

const original = [1, 2, 3];
const copy = [...original];

✔ Creates a new array

✔ Avoids reference issues


Merging arrays

const a = [1, 2];
const b = [3, 4];

const merged = [...a, ...b];
// [1, 2, 3, 4]

Spread with objects

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

const updatedUser = { ...user, city: "Mumbai" };

Adds new properties without modifying original


What is the Rest Operator?

The rest operator is used to collect multiple values into one.


Example with function parameters

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

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

All arguments are collected into numbers array


Visual

1, 2, 3, 4
   ↓ rest
[1, 2, 3, 4]

Rest with arrays (destructuring)

const [first, ...rest] = [10, 20, 30, 40];

console.log(first); // 10
console.log(rest);  // [20, 30, 40]

Rest with objects

const user = { name: "Adarsh", age: 21, city: "Mumbai" };

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

console.log(name); // Adarsh
console.log(rest); // { age: 21, city: "Mumbai" }

Key Differences (Very Important)

Feature Spread Rest
Purpose Expands values Collects values
Direction Outward → Inward ←
Usage Arrays, objects, function calls Function params, destructuring
Result Individual elements Array/object

One-line memory trick

Spread spreads things out

Rest gathers things together


Practical use cases


Copying data safely

const newArray = [...oldArray];

Merging objects (very common in React)

const newState = { ...state, isLoggedIn: true };

Flexible function arguments

function logAll(...args) {
  console.log(args);
}

Removing properties

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

Real-world analogy (easy to remember)

Imagine a pizza

  • Spread → Cutting pizza into slices and serving

  • Rest → Taking all slices and putting them back into one box


Common beginner mistakes

  • Confusing spread and rest

  • Using rest in wrong position (must be last)

  • Thinking both do the same thing


Final thoughts

Spread and rest might look identical (...),

but they solve opposite problems.

Once you understand:

  • Expanding vs collecting everything becomes intuitive.