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) {
}