Destructuring in JavaScript is a convenient way to extract values from arrays or properties from objects into distinct variables. It improves code readability and makes data unpacking cleaner and more concise.
Destructuring works with both arrays and objects, and is often used in function parameters, variable assignments, and loops.
1. Array Destructuring
Array destructuring lets you unpack values from an array into individual variables, based on their position (index).
Basic Syntax:
javascriptCopyEditconst numbers = [10, 20, 30];
const [a, b, c] = numbers;
console.log(a); // 10
console.log(b); // 20
console.log(c); // 30
You can skip elements by leaving gaps:
javascriptCopyEditconst [first, , third] = [1, 2, 3];
console.log(first); // 1
console.log(third); // 3
Default Values
You can assign default values if the array element is undefined
:
javascriptCopyEditconst [x = 5, y = 10] = [1];
console.log(x); // 1
console.log(y); // 10
Swapping Values
Destructuring is great for swapping values without a temporary variable:
javascriptCopyEditlet a = 1, b = 2;
[a, b] = [b, a];
console.log(a, b); // 2 1
Rest Operator
Use the rest syntax ...
to collect remaining elements:
javascriptCopyEditconst [head, ...tail] = [1, 2, 3, 4];
console.log(head); // 1
console.log(tail); // [2, 3, 4]
2. Object Destructuring
Object destructuring allows you to unpack properties from an object into variables using property names.
Basic Syntax:
javascriptCopyEditconst person = { name: 'Alice', age: 25 };
const { name, age } = person;
console.log(name); // Alice
console.log(age); // 25
Renaming Variables
You can assign properties to new variable names:
javascriptCopyEditconst user = { id: 101, username: 'jsfan' };
const { id: userId, username: userName } = user;
console.log(userId); // 101
console.log(userName); // jsfan
Default Values
Set default values for properties that might be undefined
:
javascriptCopyEditconst { city = 'Unknown' } = {};
console.log(city); // Unknown
Nested Destructuring
You can destructure nested objects:
javascriptCopyEditconst person = {
name: 'John',
address: {
city: 'New York',
zip: 10001
}
};
const { address: { city } } = person;
console.log(city); // New York
Note: if address
is undefined, this will throw an error. Use optional chaining or default values for safety.
3. Destructuring in Functions
Array Parameters
javascriptCopyEditfunction sum([a, b]) {
return a + b;
}
console.log(sum([3, 4])); // 7
Object Parameters
javascriptCopyEditfunction greet({ name, age }) {
console.log(`Hello, ${name}. You are ${age} years old.`);
}
greet({ name: 'Emily', age: 30 });
You can also set default values in function parameters:
javascriptCopyEditfunction register({ username = 'Guest', email = 'N/A' } = {}) {
console.log(username, email);
}
register(); // Guest N/A
4. Destructuring in Loops
You can destructure directly in for...of
loops:
Arrays:
javascriptCopyEditconst colors = [['red', '#f00'], ['green', '#0f0']];
for (const [name, hex] of colors) {
console.log(`${name}: ${hex}`);
}
Objects:
javascriptCopyEditconst users = [{ name: 'Tom' }, { name: 'Jerry' }];
for (const { name } of users) {
console.log(name);
}
Benefits of Destructuring
- Cleaner Code: Reduces boilerplate for extracting values.
- Improved Readability: Easier to understand than accessing nested properties.
- More Flexible Functions: Great for handling optional parameters and defaults.
Cautions
- Be careful when destructuring
undefined
ornull
—it throws an error. - Nested destructuring can get complex—avoid it if it harms readability.
Conclusion
Destructuring is a modern JavaScript feature that simplifies how we extract data from arrays and objects. Whether you’re writing cleaner functions or working with APIs, mastering destructuring will make your code more concise and expressive.