每日一博 | JavaScript 解构赋值 5 个常见场景和实例
解构赋值语法是一种 JavaScript 表达式,通过解构赋值, 可以将属性/值从对象/数组中取出,赋值给其他变量。这种语法是 ECMAscript 6 规范引入了一种新语法,可以更轻松地从数组和对象中获取值。
1. 提取数据
先来看看如何在 JavaScript 中解构对象,可以从这个商品对象的简单示例开始。
const product = { id: 1, title: "Nike Air Zoom Pegasus 38", product_image: "/resources/products/01.jpeg", shown: "White/Pure Platinum/Midnight Navy/Wolf Grey", price: 120, }; const { id, price, title } = product;
这样,就可以通过以下方式访问相应的属性:
console.log(id); // 1 console.log(price); // 120 console.log(title); // Nike Air Zoom Pegasus 38
解构,能够让代码更加清晰简洁。如果需要解构一个更复杂的对象呢?即对象中的对象。
现在假设需要从商品列表数据中获取其中一个商品的属性,如下:
const products = [ { id: 1, title: "Nike Air Zoom Pegasus 38", price: 120, }, { id: 2, title: "Nike Air Zoom Alphafly NEXT%", price: 275, }, { id: 3, title: "Nike Zoom Fly 4", price: 89.0, }, ];
在这里,产品列表嵌套了几层,需要访问商品的信息,可以解构尽可能多的级别以获取商品对象的属性。
const [tmp, { id, title, price }] = products; console.log(id); // 2 console.log(title); // Nike Air Zoom Alphafly NEXT% console.log(price); // 275
上面的代码仅用于展示其用法,项目开发中不建议再数组中这样获取对象信息。
通常,数据列表不一定非要数组,从获取效率来说,map 对象的访问比数组效率要高。可以将上面的数据改为 map 对象,如下:
const products = { 1: { title: "Nike Air Zoom Pegasus 38", price: 120, }, 2: { title: "Nike Air Zoom Alphafly NEXT%", price: 275, }, 3: { title: "Nike Zoom Fly 4", price: 89.0, }, }; const { 2: { id, title, price }, } = products; console.log(id); // 2 console.log(title); // Nike Air Zoom Alphafly NEXT% console.log(price); // 275
在 JavaScript 中,数据可以是变量和方法,因此解构赋值也适合用在函数参数的定义,如下:
const printArticle = ({ title, remark }) => { console.log(title); console.log(remark); }; printArticle({ title: "JavaScript 解构赋值", remark: "解构赋值的实用场景介绍", });
在使用 React 或 Vue 等框架时,有很多解构赋值的地方,如方法的引入等等。
2. 别名取值
如果想创建与属性名称不同的变量,那么可以使用对象解构的别名功能。
const { identifier: aliasIdentifier } = expression;
identifier
是要访问的属性的名称,aliasIdentifier
是变量名称。具体用法如下:
const products = { 1: { title: "Nike Air Zoom Pegasus 38", price: 120, }, 2: { title: "Nike Air Zoom Alphafly NEXT%", price: 275, }, 3: { title: "Nike Zoom Fly 4", price: 89.0, }, }; const { 2: { price: productPrice }, } = products; console.log(productPrice); // 275
3. 动态属性
可以使用动态名称提取到变量属性(属性名称在运行时已知):
const { [propName]: identifier } = expression;
propName
表达式应计算为属性名称(通常是字符串),标识符应指示解构后创建的变量名称,用法如下:
const products = { 1: { title: "Nike Air Zoom Pegasus 38", price: 120, }, 2: { title: "Nike Air Zoom Alphafly NEXT%", price: 275, }, 3: { title: "Nike Zoom Fly 4", price: 89.0, }, }; const productKey = "1"; const { [productKey]: product } = products; console.log(product); // { title: 'Nike Air Zoom Pegasus 38', price: 120 }
上面代码中,可以通过更新 productKey
的值进而使得 product
的值也跟随变化。
4. 对象解构中的 Rest
将 rest 语法添加到解构中,Rest 属性收集那些尚未被解构模式拾取的剩余可枚举属性键。
const { identifier, ...rest } = expression;
解构后,变量标识符包含属性值。 rest
变量是一个具有其余属性的普通对象。
const product = { title: "Nike Air Zoom Pegasus 38", price: 120, quantity: 5, category_id: 1, reviews: 9830, total: 45, }; const { title, ...others } = product; console.log(others); // { price: 120, quantity: 5, category_id: 1, reviews: 9830, total: 45 }
对于数组,可以通过 Rest 的实现首尾值的获取:
const numbers = [1, 2, 3]; const [head, ...tail] = numbers; console.log(head); // 1 console.log(tail); // [ 2, 3 ]
5. 默认值
正如前面介绍的那样可以在解构数组时为其分配默认值:
const RGBA = [255, 34]; const [R, G, B = 0, A = 1] = RGBA; console.log(R); // 255 console.log(G); // 34 console.log(B); // 0 console.log(A); // 1
这样,可以将确保在 B
、A 未定义的情况下有一个默认值。
总结
解构是一个非常实用的特性,它被添加到了 JavaScript 的 ES6 版本中了。通过解构,可以快速方便地从对象和数组中提取属性或数据到单独的变量中。它适用于嵌套对象,可以使用...
运算符为数组分配赋值。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
D 语言/DLang 2.098.0 发布
D 语言(DLang) 2.098.0 版本已发布,公告显示,DLang 2.098.0 现在以 DMD 2.098.0(D 编译器)和 LDC 1.28.0(基于 LLVM 的 D 编译器)的形式提供。此外,D 语言已经支持 OpenBSD。 此版本包含 17 项目主要变更,同时修复了 160 个 issue。 编译器变更 添加别名赋值 (Alias Assignment) 功能 通过 ImportC 编译器从 D 语言访问C 语言的声明 使用 syntax(args) => {}会触发一条 deprecation 消息 对生成 C++ 头文件的改进 默认启用 -preview=dtorfields 为向量类型添加.min, .max 等属性 使用可变变量作为 switch case 会触发错误 越界的数组访问现在会提供更友好的错误消息 从 D 语言中删除类分配器 (Class allocators) 初始化来自static this的不可变全局数据现在会触发一个错误 添加-target=<triple>用于操作系统、C 和 C++ 运行时交叉编译 默认初始化uni...
- 下一篇
SQLE —— SQL 审查工具
SQLE 是一款支持多场景审核,支持标准化上线流程,原生支持 MySQL 审核且数据库类型可扩展的 SQL 审核工具。 产品特色 支持通过插件的形式扩展可审核上线的数据库类型,无需升级软件,导入审核插件即可获对应数据库类型的审核上线能力,使用平台所有功能; 支持标准的 HTTP API,可与其他内部流程系统对接; 支持 DDL,和 DML 同时审核,并实现同工单内语句上下文关联; 支持在审核规则外对语句做必要的对象验证,防止实际执行时库表不存在等情况。 主要功能 平台管理 支持用户和角色管理; 支持配置上线数据库; 支持基于角色的资源隔离; 支持配置审核规则模板; 支持对不同的数据库应用不同的规则模板。 SQL 审核 支持工单审批流程,支持工单隔离; 支持邮件推送审批事件; 支持 SQL 上线; 支持生成回滚语句; 支持审核 MyBatis XML 文件; 支持审核建议按 SQL 归类去重展示; 支持审核报告下载。 SQL 审核计划 支持通过标准接口收集来自业务的 SQL 统计信息; 提供 MyBatis 文件扫描上传程序(scanner),可集成CI/CD; 支持静态审核,即脱离上线...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库