JavaScript9 min read

JavaScript ES6+ Features: Destructuring and Spread

Master ES6+ features. Learn destructuring, spread operator, template literals, and arrow functions.

Alex Thompson
December 19, 2025
0.0k0

JavaScript ES6+ Features

What is ES6?

ES6 (ECMAScript 2015) added many features that make JavaScript easier to write. These are now standard in modern JavaScript.

Destructuring: Unpacking Values

Destructuring lets you extract values from arrays and objects easily.

### Array Destructuring - Step by Step

**Old way:** ```javascript const numbers = [1, 2, 3]; const first = numbers[0]; const second = numbers[1]; const third = numbers[2]; ```

**New way (ES6):** ```javascript const numbers = [1, 2, 3]; const [first, second, third] = numbers; ```

**What happens:** ``` ┌─────────────┐ │ numbers = │ │ [1, 2, 3] │ └──────┬──────┘ │ │ Destructure │ ┌──────▼──────────────────┐ │ first = 1 │ │ second = 2 │ │ third = 3 │ └─────────────────────────┘ ```

**Skip values:** ```javascript const [first, , third] = numbers; // Skip second ```

### Object Destructuring - Step by Step

**Old way:** ```javascript const user = { name: 'John', age: 25, email: 'john@example.com' }; const name = user.name; const age = user.age; ```

**New way (ES6):** ```javascript const user = { name: 'John', age: 25, email: 'john@example.com' }; const { name, age } = user; ```

**What happens:** ``` ┌─────────────────────┐ │ user = { │ │ name: 'John', │ │ age: 25, │ │ email: '...' │ │ } │ └──────┬──────────────┘ │ │ Destructure │ ┌──────▼──────────────┐ │ name = 'John' │ │ age = 25 │ └────────────────────┘ ```

**Rename while destructuring:** ```javascript const { name: userName, age: userAge } = user; ```

Spread Operator: Expanding Values

The spread operator (`...`) "spreads out" arrays and objects.

### Copying Arrays

**Problem:** Arrays are references, so this doesn't work: ```javascript const arr1 = [1, 2, 3]; const arr2 = arr1; // arr2 points to same array! arr2.push(4); console.log(arr1); // [1, 2, 3, 4] - arr1 changed too! ```

**Solution with spread:** ```javascript const arr1 = [1, 2, 3]; const arr2 = [...arr1]; // Creates new array arr2.push(4); console.log(arr1); // [1, 2, 3] - arr1 unchanged! ```

**How it works:** ``` ┌─────────────┐ │ arr1 = │ │ [1, 2, 3] │ └──────┬──────┘ │ │ ...arr1 spreads it │ ┌──────▼──────────────┐ │ [1, 2, 3] │ │ (new array) │ └─────────────────────┘ ```

### Combining Arrays

```javascript const fruits = ['apple', 'banana']; const vegetables = ['carrot', 'broccoli']; const all = [...fruits, ...vegetables]; // ['apple', 'banana', 'carrot', 'broccoli'] ```

### Object Spread

**Updating objects:** ```javascript const user = { name: 'John', age: 25 }; const updated = { ...user, age: 26 }; // { name: 'John', age: 26 } ```

**Adding properties:** ```javascript const user = { name: 'John' }; const withEmail = { ...user, email: 'john@example.com' }; // { name: 'John', email: 'john@example.com' } ```

Template Literals: Better Strings

**Old way:** ```javascript const name = 'John'; const message = 'Hello, ' + name + '! How are you?'; ```

**New way (ES6):** ```javascript const name = 'John'; const message = `Hello, ${name}! How are you?`; ```

**Benefits:** - Can use variables with `${variable}` - Multi-line strings work naturally - Cleaner and easier to read

**Multi-line example:** ```javascript const html = ` <div> <h1>${title}</h1> <p>${content}</p> </div> `; ```

Arrow Functions: Shorter Syntax

**Old way:** ```javascript const add = function(a, b) { return a + b; }; ```

**New way (ES6):** ```javascript const add = (a, b) => a + b; ```

**When to use:** - Short functions - Callbacks - Array methods

**Important:** Arrow functions don't have their own `this` - they use `this` from the outer scope.

Default Parameters

**Old way:** ```javascript function greet(name) { name = name || 'Guest'; return 'Hello, ' + name; } ```

**New way (ES6):** ```javascript function greet(name = 'Guest') { return `Hello, ${name}`; } ```

Real Example: Using All Features

```javascript // Function with default parameter function createUser({ name, age = 18, email }) { // Object destructuring in parameters return { name, age, email, isAdult: age >= 18 }; }

// Using template literals and spread const user1 = createUser({ name: 'John', email: 'john@example.com' }); const user2 = createUser({ name: 'Sarah', age: 25, email: 'sarah@example.com' });

const allUsers = [...user1, user2]; const message = `Users: ${allUsers.length}`; ```

Quick Reference

**Destructuring:** - Arrays: `const [a, b] = array` - Objects: `const { a, b } = object`

**Spread:** - Arrays: `[...arr1, ...arr2]` - Objects: `{ ...obj1, ...obj2 }`

**Template Literals:** - Use backticks: ``text ${variable}``

**Arrow Functions:** - `(a, b) => a + b`

These features make JavaScript code shorter, cleaner, and easier to read. They're used everywhere in modern JavaScript, so it's important to understand them.

#JavaScript#ES6#Destructuring#Spread#Intermediate