1. 数组的解构赋值
1.1 基本用法
const [a, b, c] = [1, 2, 3];
console.log(a);
console.log(b);
console.log(c);
const [x, , y] = [1, 2, 3];
console.log(x);
console.log(y);
const [first, ...rest] = [1, 2, 3, 4, 5];
console.log(first);
console.log(rest);
1.2 默认值
const [x = 1, y = 2] = [undefined, null];
console.log(x);
console.log(y);
const [a = 1, b = a + 1] = [2];
console.log(a);
console.log(b);
2. 对象的解构赋值
2.1 基本用法
const { name, age } = { name: 'John', age: 25 };
console.log(name);
console.log(age);
const { name: userName, age: userAge } = { name: 'John', age: 25 };
console.log(userName);
console.log(userAge);
const {
name,
address: { city, country }
} = {
name: 'John',
address: {
city: 'New York',
country: 'USA'
}
};
console.log(name);
console.log(city);
console.log(country);
2.2 默认值
const { name = 'Anonymous', age = 18 } = { name: 'John' };
console.log(name);
console.log(age);
const { name: userName = 'Anonymous', age: userAge = 18 } = {};
console.log(userName);
console.log(userAge);
3. 函数参数的解构赋值
3.1 数组参数解构
function sum([x, y]) {
return x + y;
}
console.log(sum([1, 2]));
function move([x = 0, y = 0] = []) {
return [x, y];
}
console.log(move([1, 2]));
console.log(move([1]));
console.log(move([]));
console.log(move());
3.2 对象参数解构
function printUser({ name, age }) {
console.log(\`\${name} is \${age} years old\`);
}
printUser({ name: 'John', age: 25 });
function fetchAPI({
url,
method = 'GET',
headers = {
'Content-Type': 'application/json'
}
} = {}) {
return { url, method, headers };
}
console.log(fetchAPI({ url: '/api/users' }));
4. 实际应用场景
4.1 交换变量
let x = 1;
let y = 2;
[x, y] = [y, x];
console.log(x);
console.log(y);
4.2 从函数返回多个值
function getUserInfo() {
return {
name: 'John',
age: 25,
email: 'john@example.com'
};
}
const { name, email } = getUserInfo();
console.log(name);
console.log(email);
4.3 处理 API 响应
async function fetchUserData() {
const response = await fetch('https://api.example.com/user');
const { id, name, profile: { age, avatar } } = await response.json();
return {
userId: id,
userName: name,
userAge: age,
userAvatar: avatar
};
}
4.4 模块导入
import { useState, useEffect } from 'react';
import { useState as useStateHook } from 'react';
5. 注意事项和最佳实践
5.1 解构失败的处理
const [a = 1] = [];
console.log(a);
const { name = 'Anonymous' } = {};
console.log(name);
const { x = 1 } = null || {};
console.log(x);
5.2 解构嵌套对象
const {
user: {
profile: { address: userAddress }
}
} = response;
const { user } = response;
const { profile } = user;
const { address } = profile;
5.3 解构与类型检查
interface User {
name: string;
age: number;
address?: {
city: string;
country: string;
};
}
function processUser({ name, age, address = { city: '', country: '' } }: User) {
}