一文掌握ES6解构赋值的原理及运用

本篇文章给大家带来了关于javascript的相关知识,es6允许按照一定模式从数组或对象中提取值,然后对变量进行赋值,称为解构。只要等号两边的模式相同,左边的变量就会被赋予对应的值,这种写法属于“模式匹配”。统称起来就叫做“解构赋值”。下面一起来看一下,希望对大家有帮助。

一文掌握ES6解构赋值的原理及运用

【相关推荐:javascript视频教程、web前端】

数组的解构赋值

let [a, b, c] = [1, 2, 3]

同时定义多个变量,a匹配1、b匹配2、c匹配3

一文掌握ES6解构赋值的原理及运用

解构赋值允许指定默认值,即左边变量指定默认值,右边没有对应的值,会优先输出默认值。

let [x, y = 'b'] = ['a'] // x = 'a', y = 'b'

x匹配字符a,y默认值为字符b,若右边没有对应的,默认输出字符b。

对象的解构赋值

解构不仅可以用于数组,还可以用于对象,对象的解构与数组有一个重要的不同,数组的元素是按照次序排列的,变量的取值由它的位置决定的;而对象的属性没有次序,变量必须与属性同名才能取到正确的值。

let {    name,    age,    hobbies: [one, two]} = {    name: 'shiramashiro',    age: 21,    hobbies: ['骑行', '动漫']}

比如我取age的值,改成取abc的值,由于没有和对象中的属性名对应,无法对应赋值,所以是undefined。

解构赋值的运用

交换变量的值

正常想到交换变量的值的方式

let x = 1,    y = 2,    temp = 0temp = x // x = 1 = tempx = y // y = 2 = xy = temp // temp = 1 = yconsole.log('x => ', x)console.log('y => ', y)

利用解构赋值交换变量

let x = 1;let y = 2;[x, y] = [y, x];console.log('x => ', x)console.log('y => ', y)

这样交换变量x和y的值,写法不仅简洁,而且易读,语义非常清晰。

一览运营宝 一览运营宝

一览“运营宝”是一款搭载AIGC的视频创作赋能及变现工具,由深耕视频行业18年的一览科技研发推出。

一览运营宝 41 查看详情 一览运营宝

从函数返回多个值

函数只能返回一个值,如果要返回多个值,只能将它们放在数组或对象里返回,有了解构赋值,就变得更加方便了。

提取hobbies数组中的第二个值

function getArray() {    return {        name: 'kongsam',        age: 21,        hobbies: ['骑行', '动漫', '羽毛球']    }}console.log(getArray().name + '喜欢' + getArray().hobbies[1]) // 动漫

利用解构赋值获取hobbies数组中的第二个值

let {name, age, hobbies} = getArray()console.log(name + '喜欢' + hobbies[1]) // 动漫

遍历Map结构

对于for…of循环遍历来说,遍历出来的值是一个数组,而解构赋值对于数组是可以“模式匹配”的,这很快速地取出键-值。

一文掌握ES6解构赋值的原理及运用

for…of循环遍历配合解构赋值获取键-值就非常方便。

for (let [key, value] of map) {    console.log("key => ", key)    console.log("value => ", value)}

一文掌握ES6解构赋值的原理及运用

函数参数的解构赋值

// let { x = 10, y = 5 } = {}function f({ x = 10, y = 5 } = {}) {    return [x, y]}console.log(f({ x: 100, y: 50 })) // [100, 50]console.log(f({ x: 3 })) // [3, 5]console.log(f({})) // [10, 5]console.log(f()) // [10, 5]

可以给函数的参数中传入对象,并且可以对传入的对象设置默认值。它将被解构到函数内部里进行使用,你也可以这样理解。

function f(x = 10, y = 5) {    return [x, y]}console.log(f(100, 50)) // [100, 50]console.log(f(3)) // [3, 5]console.log(f()) // [10, 5]

上面的写法不一样,也会导致结果不一样

function f({ x, y } = { x: 10, y: 5 }) {    return [x, y]}console.log(f({ x: 100, y: 50 })) // [100, 50]console.log(f({ x: 3 })) // [3, undefined]console.log(f({})) // [undefined, undefined]console.log(f()) // [10, 5]

第三和第四个打印会有undefined,这是因为传入的x或y不对应对象属性中的值,匹配不成功所导致的。

【相关推荐:javascript视频教程、web前端】

以上就是一文掌握ES6解构赋值的原理及运用的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/546915.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
php怎么过滤表单
上一篇 2025年11月9日 18:08:48
如何为iPhone13Mini获取固件?官方来源下载指南
下一篇 2025年11月9日 18:08:54

相关推荐

  • JavaScript设计原则_JavaScript可维护代码

    每个函数应只做一件事,如拆分数据处理与DOM操作,命名体现功能(如formatDate),长度控制在20行内;2. 使用清晰命名(如currentUser、isValid)减少注释依赖,关键逻辑注明“为什么”;3. 按功能模块化组织代码,如api.js处理请求,utils.js存放工具函数,使用im…

    2026年5月10日
    000
  • JavaScript中为动态列表元素创建唯一悬停描述的教程

    本教程旨在解决如何为动态生成的列表或数组元素分配唯一悬停描述(tooltip)的问题。文章将深入探讨使用javascript对象和map数据结构来高效地管理名称与描述的映射关系,并提供具体的代码示例,以实现每个列表项在鼠标悬停时显示不同的自定义信息,同时兼顾性能与数据顺序的需求。 在网页开发中,我们…

    2026年5月10日
    000
  • JavaScript模块化是什么_ES6模块和CommonJS有什么区别呢

    JavaScript模块化将代码拆分为独立可复用单元,ES6模块(import/export,编译时加载、实时引用)与CommonJS(require/module.exports,运行时加载、值拷贝)核心区别在于设计目标和运行机制不同。 JavaScript模块化是把代码按功能拆分成独立、可复用的…

    2026年5月10日
    000
  • JavaScript中动态生成HTML链接:正确使用模板字面量嵌入URL

    本文深入探讨了在javascript中动态生成html链接时,如何正确地将变量(尤其是url)嵌入到`href`属性中。通过分析常见的错误,即混淆javascript的模板字面量与框架特有的模板语法,文章详细演示了使用es6模板字面量`${}`进行字符串插值的正确方法,确保动态链接能够被浏览器正确解…

    2026年5月10日
    000
  • JavaScript模块化开发有哪些方法?

    JavaScript模块化开发主要有四种方法:1. CommonJS(Node.js默认,同步加载,导出值拷贝);2. AMD(浏览器异步设计,依赖前置);3. CMD(就近依赖,延迟加载);4. ES6 Module(标准规范,静态分析、实时绑定、原生支持,推荐新项目使用)。 JavaScript…

    2026年5月10日
    000
  • 将HTML动态表格多行数据保存到Google Sheet的教程

    本教程旨在解决html表单动态添加多行数据时,google apps script web app仅保存第一行数据的问题。核心解决方案是利用`e.parameters`(复数)获取所有同名输入字段的值数组,并通过修改apps script的`dopost`函数,将这些数据结构化为多行,一次性写入go…

    2026年5月10日
    000
  • 使用共享状态和Proxy模式管理多事件监听器间的逻辑依赖

    当多个事件监听器之间存在隐式逻辑依赖时,代码的可读性和维护性会显著下降。本文介绍一种通过共享状态对象来明确管理这些依赖的教程,特别是在处理如元素拖拽等复杂交互时。我们将演示如何利用javascript的proxy对象,以一种解耦且可控的方式,响应状态变化并执行相应的操作,从而构建结构清晰、易于理解的…

    2026年5月10日
    000
  • JavaScript 原型链:理解原型继承与属性查找机制

    JavaScript通过原型链实现继承,对象属性查找会沿原型链向上搜索。每个构造函数有prototype指向原型对象,实例通过__proto__链接到原型,共享其属性和方法。例如Person构造函数的原型添加greet方法,其实例john可调用该方法,实际访问的是Person.prototype中的…

    2026年5月10日
    000
  • 优化JavaScript大型数组:高效重构map与filter以获取唯一值

    本文探讨了在处理大型javascript数组时,如何高效地结合`map`和`filter`操作以获取唯一值。针对传统`filter`结合`indexof`或`reduce`结合`includes`在数据量巨大时出现的性能瓶颈,本文推荐使用内置的`set`数据结构,它能以显著提升的效率解决重复值问题,…

    2026年5月10日
    000
  • javascript如何操作字符串_常用的字符串方法有哪些

    JavaScript字符串操作方法均不修改原字符串,而是返回新值:包括查找(indexOf、includes)、截取(slice)、大小写转换(toLowerCase)、去空格(trim)、分割拼接(split/join)、替换(replace/replaceAll)等。 JavaScript 中操…

    2026年5月10日
    000
  • 如何创建函数_javascript中有哪些方式?

    JavaScript创建函数有四种方式:函数声明(具名、可提升)、函数表达式(匿名或具名、不可提升)、箭头函数(无this/arguments、不可构造)、Function构造函数(动态生成、性能差)。 在 JavaScript 中创建函数主要有四种常用方式,每种适用场景不同,理解区别能帮你写出更清…

    2026年5月10日
    000
  • JS插件如何实现模块化_JS插件模块化开发方法与最佳实践

    采用ES6模块化规范可提升JS插件的可维护性与复用性,通过合理拆分功能模块、设计可配置接口并结合构建工具打包发布,实现高效协作与多环境兼容。 在现代前端开发中,JS插件的模块化不仅能提升代码可维护性,还能增强复用性和协作效率。实现模块化的关键在于合理组织代码结构、使用标准模块规范,并遵循清晰的设计原…

    2026年5月10日
    000
  • JavaScript:高效比较两个对象中对应数组值的长度

    本教程详细讲解如何在javascript中高效地比较两个对象,确保它们所有相同键对应的数组值具有相同的长度。文章将深入探讨 `object.entries()` 和 `array.prototype.every()` 的结合使用,并通过解构赋值优化代码,避免常见的编程陷阱。我们将提供清晰的代码示例,…

    2026年5月10日
    000
  • JavaScript中的严格模式(use strict)详解_javascript基础

    严格模式是通过在脚本或函数顶部添加”use strict”来启用的编译指令,使JavaScript代码在更严格的条件下运行。它禁止意外创建全局变量、函数内this指向全局对象、删除不可配置属性、重复函数参数名等行为,并限制arguments、eval等关键字的使用,提升代码安…

    2026年5月10日
    000
  • JavaScript中的迭代器与生成器详解_js ES6+

    迭代器是遵循迭代器协议的对象,提供next()方法返回{value, done};2. 生成器函数用function*定义,通过yield暂停并返回值,自动实现迭代器接口。 在JavaScript ES6+中,迭代器(Iterator)和生成器(Generator)是处理数据序列的重要机制。它们让开…

    2026年5月10日
    100
  • 使用JS动态生成HTML时如何管理状态_使用JS动态生成HTML时如何管理状态策略

    答案:管理JavaScript动态生成HTML的状态需以数据驱动UI。1. 使用单一数据源确保状态集中,如将用户信息存于对象中,更新时先改数据再重新渲染;2. 封装状态与逻辑,用类组织数据和方法,调用方法后自动刷新视图;3. 借鉴响应式模式,通过Proxy监听状态变化并自动更新界面;4. 避免频繁直…

    2026年5月10日
    000
  • html5如何实现弹窗_HTML5模态框弹窗实现步骤与代码【弹窗】

    可使用HTML5 dialog元素、div+CSS+JS手动实现、:target伪类无JS方案或SweetAlert2等第三方库创建强制交互弹窗;其中dialog语义清晰且原生支持模态行为,其余方案侧重兼容性、轻量性或功能丰富性。 如果您希望在网页中创建一个用户无法绕过、必须交互的弹窗界面,则可以使…

    2026年5月10日
    000
  • JavaScript中的数组去重有哪些高效算法?

    使用Set去重适用于基本类型,代码简洁性能好;Map适合对象数组按属性去重,灵活但内存占用高;双指针法用于已排序数组,空间复杂度低。 JavaScript中数组去重的高效方法取决于数据类型和性能需求。以下是几种常用且高效的实现方式。 使用 Set 去重(推荐) ES6 引入的 Set 数据结构天然支…

    2026年5月10日
    000
  • JavaScript精确筛选ID带特定数字模式的DOM元素

    本文详细阐述如何利用JavaScript的document.querySelectorAll结合数组的filter方法和正则表达式,高效且精确地筛选出ID以特定数字模式结尾的DOM元素。该方法解决了纯CSS选择器无法处理复杂ID模式的局限性,确保仅匹配符合严格数字后缀规则的元素,从而提高DOM操作的…

    2026年5月10日
    100
  • JavaScript条件隐藏计数器:当值为0时隐藏元素

    本教程将指导您如何使用纯javascript动态管理网页上的计数器显示。我们将学习如何获取特定元素的数量,并将该数量显示在指定的“元素中。更重要的是,当计数为零时,我们将实现一种机制来自动隐藏相应的“元素,从而优化用户界面,避免显示不必要的零值,并融入现代javascript…

    2026年5月10日
    000

发表回复

登录后才能评论
关注微信