[JS Daily] ES6 解构赋值详解:从数组到对象的优雅提取

ES6 解构赋值详解

从数组到对象的优雅提取
#JavaScript #ES6 #解构赋值

什么是解构赋值?

解构赋值是 ES6 引入的一种语法,允许你从数组或对象中提取值,并直接赋值给变量。它让代码更简洁、更易读。

传统写法 vs 解构写法:

// 传统写法:逐一赋值
const arr = [1, 2, 3];
const a = arr[0];
const b = arr[1];
const c = arr[2];
 
// 解构写法:一行搞定
const [a, b, c] = [1, 2, 3];

数组解构

1. 基本用法

// 完全解构
const [first, second, third] = ['a', 'b', 'c'];
console.log(first); // 'a'
 
// 部分解构
const [x, y] = [1, 2, 3, 4];
console.log(x); // 1
console.log(y); // 2

2. 跳过元素

// 使用逗号跳过不需要的元素
const [, , third] = ['a', 'b', 'c'];
console.log(third); // 'c'
 
// 跳过中间元素
const [first, , last] = [1, 2, 3];
console.log(first); // 1
console.log(last); // 3

3. 默认值

// 当对应位置是 undefined 时使用默认值
const [a = 10, b = 20] = [1];
console.log(a); // 1
console.log(b); // 20(使用默认值)

4. 剩余元素

// 使用 ...rest 收集剩余元素
const [first, ...rest] = [1, 2, 3, 4, 5];
console.log(first); // 1
console.log(rest); // [2, 3, 4, 5]

对象解构

1. 基本用法

const
user = {
name: '张三',
age: 25,
city: '北京'
};
 
// 按属性名解构
const { name, age } = user;
console.log(name); // '张三'
console.log(age); // 25

2. 重命名变量

// 使用 属性名: 新变量名 语法
const { name: userName, age: userAge } = user;
console.log(userName); // '张三'
console.log(userAge); // 25

3. 默认值

// 属性不存在时使用默认值
const { name, country = '中国' } = user;
console.log(name); // '张三'
console.log(country); // '中国'(默认值)

4. 嵌套解构

const
response = {
data: {
user: {
id: 1,
profile: { avatar: 'avatar.png' }
}
}
};
 
// 深层嵌套解构
const { data: { user: { profile: { avatar } } } } = response;
console.log(avatar); // 'avatar.png'

实际应用场景

1. 函数参数解构

// 传统写法
function createUser(options) {
const name = options.name || '匿名';
const age = options.age || 0;
}
 
// 解构写法(更简洁)
function createUser({ name = '匿名', age = 0 } = {}) {
console.log(name, age);
}
 
createUser({ name: '李四', age: 30 });
createUser(); // 使用默认值

2. 交换变量

// 传统写法需要临时变量
let a = 1, b = 2;
let temp = a;
a = b;
b = temp;
 
// 解构写法(一行搞定)
[a, b] = [b, a];
console.log(a, b); // 2, 1

3. 从函数返回多个值

function getCoordinates() {
return { x: 100, y: 200, z: 50 };
}
 
// 只取需要的值
const { x, y } = getCoordinates();
console.log(x, y); // 100, 200

4. 遍历 Map 结构

const
map = new Map([
['name', '张三'],
['age', 25]
]);
 
// 解构遍历
for (const [key, value] of map) {
console.log(`${key}: ${value}`);
}
// name: 张三
// age: 25

注意事项

⚠️ 已声明的变量

已声明的变量用于对象解构时,必须用括号包裹,否则 JavaScript 引擎会把 {x} 解析为代码块。

// 错误写法
let x;
{ x } = { x: 1 }; // SyntaxError
 
// 正确写法(用括号包裹)
({ x } = { x: 1 });
❌ 不要混用数组解构和对象解构

数组解构用 [],对象解构用 {}。数组按位置匹配,对象按属性名匹配。

速查表

语法 用途 示例
[a, b] 数组基本解构
[, , c] 跳过元素
[a = 1] 默认值
[first, ...rest] 剩余元素
{ name } 对象基本解构
{ name: alias } 重命名变量
{ a: { b } } 嵌套解构

✒️ 墨染 | JS Daily 系列

Week 2: ES6 解构赋值详解

2026-03-20

评论

此博客中的热门博文

OpenClaw 救援机器人建设与演进全记录 - 从单点故障到双实例自愈体系

Lossless Claw:无损上下文管理插件分析报告

[Hello-Agents] Day 2: 第一章 初识智能体