一文掌握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)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月9日 18:08:18
下一篇 2025年11月9日 18:09:21

相关推荐

  • 函数闭包变量作用域如何理解

    闭包是函数记住并访问其外部作用域变量的机制,即使外部函数已执行完毕。例如内部函数引用外部函数变量并被返回时,该变量仍被保留,形成闭包。它用于数据私有化、模块模式和保持回调中的状态,如计数器中封装value变量,实现受控访问。 闭包是 JavaScript 中一个核心概念,理解它需要搞清楚函数内部的变…

    2025年12月16日
    000
  • 跨语言浮点数精度:硬件、编译器与数据类型选择指南

    本文探讨了在C/C++、D和Go等多种编程语言中实现浮点数计算时,如何确保结果精度的一致性。核心内容围绕硬件架构、浮点运算库以及编译器优化对精度产生的影响,并分析了常见浮点数据类型(如32位float和64位double)在不同语言间的对应关系,旨在为跨语言开发提供精确性考量。 浮点数精度受控的关键…

    2025年12月16日
    000
  • Golang在云原生环境中性能测试示例

    答案是:在云原生环境中,Golang性能测试需结合pprof、k6等工具,通过明确指标、模拟生产环境、持续监控与CI/CD集成,系统性地定位瓶颈并优化资源利用。 Golang在云原生环境中进行性能测试,说白了,就是为了确保你的Go应用在容器化、微服务化、弹性伸缩的云上跑得又快又稳,能扛住预期的流量冲…

    2025年12月15日
    000
  • 如何获取一个对象的所有属性和方法?

    答案:获取对象所有属性和方法需结合Reflect.ownKeys()和for…in。Reflect.ownKeys()返回对象自身所有键(包括字符串和Symbol,可枚举与不可枚举),而for…in可遍历原型链上的可枚举属性,配合hasOwnProperty()可区分自身与继…

    2025年12月14日
    000
  • 什么是闭包(Closure)?它有哪些典型用途?

    闭包是函数与其词法环境的组合,使函数能访问并记住其外部变量,即使在外部函数执行完毕后依然保持引用,从而实现数据私有化、柯里化、事件处理等高级功能,但也需注意内存泄漏和性能开销等问题。 闭包,简单来说,就是一个函数和它被创建时所处的词法环境的组合。这意味着,即使这个函数在它定义时的作用域之外被执行,它…

    2025年12月14日
    000
  • Magento 2中原生ES模块的正确加载姿势与RequireJS兼容性解析

    本文旨在解决在magento 2环境中通过requirejs加载原生javascript es模块时遇到的`uncaught syntaxerror: unexpected token ‘export’`错误。核心问题在于requirejs不直接支持es模块的`import/…

    2025年12月13日
    000
  • 在 Laravel 中发送 HTML 邮件并解决内容换行与格式显示问题

    本教程详细介绍了在 laravel 应用中发送 html 格式邮件的方法,以解决邮件内容换行符(如 “)无法正确渲染,导致文本被截断或格式混乱的问题。核心在于确保邮件内容被识别为 html 类型,并通过 laravel 的 mailable 类和 blade 模板实现这一目标,从而保证邮件在各种客…

    2025年12月12日 好文分享
    000
  • php怎么用ajax_PHP AJAX异步交互与动态数据加载方法

    可通过PHP与AJAX结合实现页面无刷新更新内容,主要方法包括:一、使用原生JavaScript的XMLHttpRequest对象进行异步请求,配置请求参数并处理响应;二、利用jQuery的$.ajax()等方法简化代码,提升开发效率;三、采用Fetch API结合Promise语法实现现代化请求处…

    2025年12月12日
    000
  • 解决Laravel邮件内容换行符不生效问题:发送HTML格式邮件指南

    本教程旨在解决在laravel应用中发送邮件时,html换行符()不生效的问题。核心在于确保邮件内容以html格式发送,而非纯文本。文章将指导您如何利用laravel的mailable系统和blade模板来正确构建和发送包含html格式的邮件,确保换行和其他样式能被邮件客户端正确解析和显示。 理解问…

    2025年12月12日
    000
  • 在 Laravel 中发送 HTML 邮件并确保换行符正确显示

    本教程详细阐述了在 laravel 应用程序中发送包含 html 格式内容(如换行符 “)的电子邮件时,如何确保邮件客户端正确解析。核心在于通过 laravel 的 mailable 类或直接设置邮件头,明确指定 `content-type: text/html`,从而避免内容被错误解析为纯文本或…

    2025年12月12日 好文分享
    000
  • 解决Laravel邮件内容换行显示异常:确保HTML渲染

    在laravel中发送包含html标签(如“)的邮件时,若内容无法正确换行或被截断,通常是因为邮件客户端将其识别为纯文本。核心解决方案是确保邮件头部明确设置`content-type: text/html`。本文将指导您如何在laravel中利用mailable类或`mail::html()`方法…

    2025年12月12日 好文分享
    000
  • 编程语言排行榜2026 十大编程语言推荐

    如果您正在为2026年的技术选型或职业发展寻找最值得学习的编程语言,参考最新的行业趋势和开发者社区动态至关重要。以下是基于当前主流编程语言排行榜和市场需求整理出的十大推荐语言及其应用方向。 点击☞☞☞java速学教程(入门到精通)☜☜☜直接学习 点击☞☞☞python速学教程(入门到精通)☜☜☜直接…

    2025年12月12日 好文分享
    000
  • Web前端获取Select下拉菜单选中值并与后端PHP交互的教程

    本教程详细介绍了如何在web前端使用javascript获取html “ 下拉菜单中用户选中的选项值。文章通过示例代码演示了如何监听 `change` 事件,捕获选定值和文本,并简要说明了如何将这些前端数据传递回后端php进行进一步处理,以实现动态内容展示或数据查询。 在构建交互式Web…

    2025年12月12日
    000
  • PHP框架怎么管理静态资源文件_PHP框架资源压缩与版本控制

    静态资源管理通过合理组织、压缩合并及版本控制提升性能。1. 资源存放在public/css、public/js目录,源文件置于resources/assets由构建工具编译输出;2. 使用Webpack、Vite或Laravel Mix合并CSS/JS为单一文件,启用压缩减小体积,图片转WebP格式…

    2025年12月12日
    000
  • NPM与传统Web项目集成:构建流程、CDN及最佳实践

    本文探讨了将npm包集成到传统php/静态网站结构中的有效策略。针对直接使用node_modules的挑战,我们推荐采用构建工具(如webpack、vite)进行资产优化和打包,以实现“摇树优化”和文件精简。同时,也介绍了利用cdn服务或寻找部署就绪版本作为简化方案,旨在提供一套清晰、高效的npm资…

    2025年12月12日
    000
  • 将NPM模块集成到PHP/静态网站的现代实践

    在php或静态网站中整合npm模块时,直接引用`node_modules`路径并非最佳实践。推荐采用前端构建工具(如webpack、vite)进行资源打包和优化,以实现代码摇树、文件精简。对于小型项目,可考虑使用cdn服务直接引入模块,或手动复制所需文件,但后者维护成本较高。理解这些方法有助于构建高…

    2025年12月12日
    000
  • JavaScript 中将对象转换为带索引的格式化字符串数组

    本教程演示了如何在 javascript 中将一个键值对对象转换为一个扁平化的字符串数组。每个输出字符串将包含原始对象的键、一个三位零填充的递增索引以及对应的值,从而实现数据的结构化格式化输出。文章提供了两种实现方式,包括使用传统的 `for…in` 循环和更简洁的 `object.ke…

    2025年12月12日
    000
  • 使用 AJAX 在 Laravel 中动态构建表格:解决数据未定义问题

    本教程旨在指导您如何在 Laravel 应用中,利用 AJAX 技术动态地从后端获取数据并渲染到 HTML 表格中。我们将详细阐述后端控制器如何正确返回 JSON 格式的数据,以及前端 JavaScript 如何解析这些数据并动态生成表格行,从而有效避免 $users is undefined 这类…

    2025年12月12日
    000
  • JavaScript与PHP交互:处理多行字符串的语法陷阱与解决方案

    本文旨在解决将PHP动态生成的多行内容嵌入到JavaScript字符串时可能遇到的Uncaught SyntaxError: Invalid or unexpected token错误。通过深入剖析传统JavaScript字符串的限制,并引入ES6模板字面量(Template Literals)作为…

    2025年12月12日
    000
  • 解决JavaScript中PHP多行输出导致的语法错误

    本文旨在解决JavaScript同步嵌入PHP多行内容时,由于传统字符串字面量不支持换行而导致的Uncaught SyntaxError: Invalid or unexpected token错误。核心解决方案是利用JavaScript的模板字面量(template literals),即使用反引…

    2025年12月12日 好文分享
    000

发表回复

登录后才能评论
关注微信