副队长ES6+教程(3)--解构赋值

点此查看 所有教程、项目、源码导航

文章目录

  • [1. 背景介绍](#1. 背景介绍)
  • [2. 数组解构](#2. 数组解构)
    • [2.1 基础用法](#2.1 基础用法)
    • [2.2 跳过元素](#2.2 跳过元素)
    • [2.3 默认值](#2.3 默认值)
    • [2.4 剩余运算符](#2.4 剩余运算符)
  • [3. 对象解构](#3. 对象解构)
    • [3.1 基础用法](#3.1 基础用法)
    • [3.2 重命名](#3.2 重命名)
    • [3.3 默认值](#3.3 默认值)
    • [3.4 剩余运算符](#3.4 剩余运算符)
  • [4. 函数参数解构](#4. 函数参数解构)
  • [5. 使用场景与注意事项](#5. 使用场景与注意事项)
  • [6. 小结](#6. 小结)

1. 背景介绍

在没有解构赋值之前,如果想要取出对象、数组里面的值,只能通过下标或者属性名逐一获取,代码写起来重复冗长。

在小型脚本里尚可接受,但在 Vue 这类项目中,我们经常从接口、props、组合式函数中批量取出数据,如果一直使用原始写法,代码会显得繁琐,也更容易出现拼写错误。

解构赋值就是为批量提取成员而生的语法,它简洁直观,也是 Vue 源码、业务组件里出现频率极高的特性。

2. 数组解构

数组解构依靠位置顺序进行匹配,把数组中的元素依次赋值给变量。

2.1 基础用法

js 复制代码
const arr = [10, 20, 30];
const [a, b, c] = arr;
console.log(a, b, c); // 输出:10 20 30

变量会按照先后顺序,依次拿到数组对应位置的值。

2.2 跳过元素

如果不需要某一项,可以直接空置位置,用逗号占位。

js 复制代码
const arr = [1, 2, 3, 4];
const [first, , third] = arr;
console.log(first, third); // 输出:1 3

2.3 默认值

当对应位置的值为 undefined,可以触发默认值。

js 复制代码
const arr = [100];
const [x, y = 200] = arr;
console.log(y); // 输出:200

2.4 剩余运算符

使用 ... 收集剩下所有元素,只能放在最后一个变量。

js 复制代码
const [h, ...rest] = [1, 2, 3, 4];
console.log(rest); // 输出:[2, 3, 4]

3. 对象解构

对象解构不依赖顺序,依靠属性名匹配,这也是开发中最常用的形式。

3.1 基础用法

变量名和对象属性名保持一致,即可直接取值。

js 复制代码
const user = {
  name: "张三",
  age: 22
};
const { name, age } = user;
console.log(name, age); // 输出:张三 22

3.2 重命名

如果想要使用别的变量名,可以使用冒号进行重命名。

js 复制代码
const user = {
  name: "张三"
};
const { name: username } = user;
console.log(username); // 输出:张三

3.3 默认值

属性不存在或者值为 undefined,可以设置默认值。

js 复制代码
const user = {
  name: "李四"
};
const { name, gender = "未知" } = user;
console.log(gender); // 输出:未知

3.4 剩余运算符

使用 ... 收集剩下的全部属性,同样只能放在末尾。

js 复制代码
const obj = { a: 1, b: 2, c: 3 };
const { a, ...other } = obj;
console.log(other); // 输出:{ b: 2, c: 3 }

4. 函数参数解构

解构可以直接写在函数的形参位置,在 Vue 接收 props、封装工具函数时非常常用。

js 复制代码
function printUser({ name, age }) {
  console.log(name, age);
}
const u = { name: "王五", age: 18 };
printUser(u); // 输出:王五 18

也可以搭配默认值一起使用:

js 复制代码
function showInfo({ title = "默认标题" } = {}) {
  console.log(title);
}
showInfo(); // 输出:默认标题

5. 使用场景与注意事项

  • 在 Vue 中,经常用来解构 ref、reactive、toRefs 的返回值,或者解构后端返回的接口数据;
  • 如果对一个已经声明过的变量进行对象解构,外面需要加上圆括号,避免被识别为代码块;
  • null 和 undefined 不能进行解构,会直接抛出异常;
  • 数组解构看位置,对象解构看属性名,不要混淆两者匹配规则。

6. 小结

解构赋值简化了批量提取数据的代码,让代码更加清爽。在 Vue 开发里,它属于高频语法,熟练掌握之后,阅读组件代码、抽取参数都会轻松很多。对象解构的重命名、默认值、参数解构,是实际项目中最容易踩坑的地方,需要多加练习。

相关推荐
神膘护体小月半26 分钟前
css - 元素背景图由 hover 触发,初次加载时闪动的解决办法
前端·javascript·css
程序员大阳1 小时前
副队长ES6+教程(2)--let 与 const
前端·javascript·es6·const·let·var
deli0071 小时前
写满 200GB 后 SSD 为什么掉到 95MB/s?SLC 缓存模型实测
前端
曦樂~2 小时前
【Web Development】03JavaScript 基础和事件
开发语言·前端·javascript
deli0072 小时前
HTTPS 的锁是怎么挂上的?TLS 1.3 握手 6 步实测
前端
程序员大阳2 小时前
副队长ES6+教程(1)--ES6+初识
前端·ecmascript·es6
码云社区2 小时前
智慧物业系统选型指南:房屋档案、账单管理与报修协作
前端·javascript·vue.js·智慧物业
deli0073 小时前
2GB 文件传一半断网实测:HTTP 断点续传只补 15MB
前端
treasure14014 小时前
【复古】浅尝Django前后端不分离
前端·css·python·django·bootstrap·html·web