解构赋值是ES6最实用的语法之一,核心就一句话:快速从数组、对象中批量取值赋值,不用反复写下标、点属性,让代码更短、更干净。
本文精简干货,只讲必学核心+开发常用场景+避坑点,看完直接上手写代码。
一、核心原理(一眼看懂)
解构赋值就是「批量拆包赋值」,两种规则牢牢记住:
- 数组解构:按顺序匹配,只看位置
- 对象解构:按属性名匹配,不看顺序
极简对比(为什么要用?)
- 数组取值对比
// 传统写法
const arr = [10, 20, 30];
const a = arr[0];
const b = arr[1];
// 解构写法(一行搞定)
const [a, b] = arr;
2. 对象取值对比
// 传统写法
const user = { name: “前端”, age: 25 };
const name = user.name;
const age = user.age;
// 解构写法
const { name, age } = user;
二、必须掌握的基础用法
2.1 数组解构常用技巧
// 1. 跳过元素(逗号占位)
const [a, , c] = [1, 2, 3]; // a=1、c=3
// 2. 默认值兜底(防止 undefined)
const [n = 0] = []; // n=0
// 3. 剩余参数收纳(只能放最后)
const [first, …rest] = [1,2,3,4]; // first=1,rest=[2,3,4]
2.2 对象解构常用技巧
// 1. 基础解构
const { name, age } = user;
// 2. 属性重命名(解决变量名冲突)
const { bookName: name } = { bookName: “JS教程” };
// 3. 重命名 + 默认值
const { price = 0 } = {};
// 4. 嵌套解构(适配接口多层数据)
const { data: { username } } = res;
三、开发高频使用场景(90%项目都在用)
场景1:函数参数解构(最常用)
不用在函数内反复取值,参数直接解构,代码极简。
function getUser({ name, age = 18 }) {
console.log(name, age);
}
场景2:接口返回数据解构
告别多层 res.data.xxx,快速提取核心数据。
async function getData() {
const res = await fetch(“/api”);
const { code, data = [], msg } = await res.json();
}
场景3:变量快速交换(无需临时变量)
let a = 1, b = 2;
[a, b] = [b, a]; // 一行完成交换
场景4:数组遍历解构
const list = [{id:1, name:“张三”}];
list.forEach(({ id, name }) => console.log(id, name));
场景5:模块按需导入
import { ref, reactive } from “vue”;
import { debounce } from “lodash”;
四、关键避坑点(新手必看)
- 对象看名字,数组看顺序:对象解构顺序无效,属性名错了就是 undefined
- 默认值只兜底 undefined:null、0、空字符串不会触发默认值
- 剩余参数放末尾:数组解构…rest 必须在最后,否则报错
- 空数据必加默认值:解构空对象/空数组容易出现 undefined,核心数据建议兜底
五、总结
解构赋值核心价值:简化取值逻辑、精简冗余代码、提升可读性。
记住两大核心:数组按序、对象按名,配合默认值、重命名、剩余参数,就能覆盖前端所有开发场景。