Skip to main content

Command Palette

Search for a command to run...

Spread vs Rest Operators in JavaScript

Updated
4 min read
Spread vs Rest Operators in JavaScript
S

I am a Front-end Developer with 7 years of experience, started from HTML, CSS and JavaScript then switched into any UI Development again switched into React Development. Now Looking for anything like in language and started digging into that slowly.

Imagine you're working on a project where data is constantly moving, arrays are growing, objects are merging, and functions are receiving unpredictable arguments.

At first, everything feels messy… until you discover two magical operators in JavaScript:

  • Spread (...)

  • Rest (...)

Yes, they look the same but they behave completely differently.

Let’s break this down in a simple, story-like way so it actually sticks.

The Core Idea

Think of it like this:

  • Spread: Expands (opens things up)

  • Rest: Collects (gathers things together)

Same symbol. Opposite behaviour.

What is the Spread Operator?

The spread operator (...) takes something (array/object) and spreads its elements out.

Example: Expanding an Array

const fruits = ["apple", "banana", "mango"];
console.log(...fruits);

Output:

apple banana mango

It takes the array and opens it up into individual elements.

Spread with Arrays

1: Copy an Array

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

No mutation. Clean copy.

2: Merge Arrays

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

Result:

[1, 2, 3, 4]

Spread with Objects

const user = { name: "Santosh", age: 28 }; 
const updatedUser = { ...user, city: "Delhi" };

Result:

{ name: "Santosh", age: 28, city: "Delhi" }

Real-World Use Case (Spread)

Updating State (React-style thinking)

const state = { name: "Hero", age: 25 }; 
const newState = { ...state, age: 26 };

You don’t mutate you create a new version.

What is the Rest Operator?

The rest operator (...) does the opposite.

Instead of expanding, it collects multiple values into one container.

Rest in Functions

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

Here numbers = [1, 2, 3, 4]

Rest in Array Destructuring

const nums = [1, 2, 3, 4]; 
const [first, ...rest] = nums;

Result:

first = 1 
rest = [2, 3, 4]

Rest in Object Destructuring

const user = { name: "Santosh", age: 28, city: "Delhi" }; 
const { name, ...restDetails } = user;

Result:

name = "Santosh" 
restDetails = { age: 28, city: "Delhi" }

Spread vs Rest (Key Differences)

Feature Spread Operator (...) Rest Operator (...)
Purpose Expand Elements Collect Elements
Use Case Arrays, Objects, Function Calls Function params, Destructuring
Direction Inside to Outside Outside to Inside
Example [...arr] (...args)

Practical Use Cases

1: Cloning Data Safely

const newArray = [...oldArray];

Avoids mutation bugs.

2: Combining API Data

const finalData = [...apiData1, ...apiData2];

3: Flexible Function Arguments

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

4: Removing Properties from Object

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

Useful in backend/frontend security.

Visual Understanding

Spread (Expanding)

[1, 2, 3]
   ↓
1   2   3

Rest (Collecting)

1   2   3
   ↓
[1, 2, 3]

Challenge for You

Try this:

const arr = [10, 20, 30, 40]; 
const [first, second, ...others] = arr; 
const newArr = [...others, 50];

What will be the final output?

Final Thought

If you remember just one thing:

1: Spread breaks things apart
2: Rest puts things together

That’s it.

Master these two, and your JavaScript code instantly becomes:

  • Cleaner

  • Safer

  • More expressive

JavaScript becomes easier when you try things yourself.

Thank you for reading this article.

If you found this helpful, feel free to connect with me on LinkedIn and follow my journey as I continue sharing JavaScript and frontend concepts (more blogs).

JavaScript From Zero to Confident Developer

Part 1 of 9

This series is designed to help beginners learn JavaScript from the ground up in a simple and practical way. We will start with the core fundamentals like variables, data types, arrays, objects, loops, and functions. Then we will move towards DOM manipulation and real-world examples. Each article focuses on one concept with simple explanations, relatable examples, and short code snippets so that beginners can understand JavaScript step by step without feeling overwhelmed. Whether you are just starting your web development journey or want to strengthen your JavaScript fundamentals, this series will guide you from the basics to building real interactive applications.

Up next

Template Literals in JavaScript

Have you ever written a simple string… and somehow turned it into a messy nightmare? Let’s be honest. As developers, we love clean code. But there was a time when even something as basic as creating a