当前位置: 首页 > news >正文

ECMAScript6介绍及环境搭建

这实际上说明,对象的解构赋值是下面形式的简写。

let { foo: foo, bar: bar } = { foo: ‘aaa’, bar: ‘bbb’ };

也就是说,对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。

let { foo: baz } = { foo: ‘aaa’, bar: ‘bbb’ };

baz // “aaa”

foo // error: foo is not defined

上面代码中,foo是匹配的模式,baz才是变量。真正被赋值的是变量baz,而不是模式foo。

(2)嵌套对象的解构赋值

与数组一样,解构也可以用于嵌套结构的对象。

let obj = {

p: [

‘Hello’,

{ y: ‘World’ }

]

};

let { p: [x, { y }] } = obj;

x // “Hello”

y // “World”

注意,这时p是模式,不是变量,因此不会被赋值。如果p也要作为变量赋值,可以写成下面这样。

let obj = {

p: [

‘Hello’,

{ y: ‘World’ }

]

};

let { p, p: [x, { y }] } = obj;

x // “Hello”

y // “World”

p // [“Hello”, {y: “World”}]

下面是另一个例子。

4.5、解构赋值注意事项

(1)如果要将一个已经声明的变量用于解构赋值,必须非常小心。

// 错误的写法

let x;

{x} = {x: 1};

// SyntaxError: syntax error

上面代码的写法会报错,因为 JavaScript 引擎会将{x}理解成一个代码块,从而发生语法错误。只有不将大括号写在行首,避免 JavaScript 将其解释为代码块,才能解决这个问题。

// 正确的写法

let x;

({x} = {x: 1});

上面代码将整个解构赋值语句,放在一个圆括号里面,就可以正确执行。关于圆括号与解构赋值的关系,参见下文。

(2)解构赋值允许等号左边的模式之中,不放置任何变量名。因此,可以写出非常古怪的赋值表达式。

({} = [true, false]);

({} = ‘abc’);

({} = []);

上面的表达式虽然毫无意义,但是语法是合法的,可以执行。

(3)由于数组本质是特殊的对象,因此可以对数组进行对象属性的解构。

let arr = [1, 2, 3];

let {0 : first, [arr.length - 1] : last} = arr;

first // 1

last // 3

上面代码对数组进行对象解构。数组arr的0键对应的值是1,[arr.length - 1]就是2键,对应的值是3。方括号这种写法,属于“属性名表达式”。

4.6、解构赋值的用途

变量的解构赋值用途很多。

(1)交换变量的值

let x = 1;

let y = 2;

[x, y] = [y, x];

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

(2)从函数返回多个值

函数只能返回一个值,如果要返回多个值,只能将它们放在数组或对象里返回。有了解构赋值,取出这些值就非常方便。

// 返回一个数组

function example() {

return [1, 2, 3];

}

let [a, b, c] = example();

// 返回一个对象

function example() {

return {

foo: 1,

bar: 2

};

}

let { foo, bar } = example();

(3)函数参数的定义

解构赋值可以方便地将一组参数与变量名对应起来。

// 参数是一组有次序的值

function f([x, y, z]) { … }

f([1, 2, 3]);

// 参数是一组无次序的值

function f({x, y, z}) { … }

f({z: 3, y: 2, x: 1});

(4)提取JSON数据

解构赋值对提取 JSON 对象中的数据,尤其有用。

let jsonData = {

id: 42,

status: “OK”,

data: [867, 5309]

};

let { id, status, data: number } = jsonData;

console.log(id, status, number);

// 42, “OK”, [867, 5309]

上面代码可以快速提取 JSON 数据的值。

(5)函数参数的默认值

jQuery.ajax = function (url, {

async = true,

beforeSend = function () {},

cache = true,

complete = function () {},

crossDomain = false,

global = true,

// … more config

} = {}) {

// … do stuff

};

指定参数的默认值,就避免了在函数体内部再写var foo = config.foo || ‘default foo’;这样的语句。

(6)遍历Map结构

任何部署了 Iterator 接口的对象,都可以用for…of循环遍历。Map 结构原生支持 Iterator 接口,配合变量的解构赋值,获取键名和键值就非常方便。

const map = new Map();

map.set(‘first’, ‘hello’);

map.set(‘second’, ‘world’);

for (let [key, value] of map) {

console.log(key + " is " + value);

}

// first is hello

// second is world

如果只想获取键名,或者只想获取键值,可以写成下面这样。

// 获取键名

for (let [key] of map) {

// …

}

// 获取键值

for (let [,value] of map) {

// …

}

(7)输入模块的指定方法

加载模块时,往往需要指定输入哪些方法。解构赋值使得输入语句非常清晰。

const { SourceMapConsumer, SourceNode } = require(“source-map”);

5、字符串、函数、数组、对象的扩展


5.1、模板字符串

传统的 JavaScript 语言,输出模板通常是这样写的(下面使用了 jQuery 的方法)。

$(‘#result’).append(

‘There are ’ + basket.count + ' ’ +

'items in your basket, ’ +

’ + basket.onSale +

‘ are on sale!’

);

上面这种写法相当繁琐不方便,ES6 引入了模板字符串解决这个问题。

$(‘#result’).append(`

There are ${basket.count} items

in your basket, ${basket.onSale}

are on sale!

`);

模板字符串(template string)是增强版的字符串,用反引号(`)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。

// 普通字符串

In JavaScript '\n' is a line-feed.

// 多行字符串

`In JavaScript this is

not legal.`

console.log(`string text line 1

string text line 2`);

// 字符串中嵌入变量

let name = “Bob”, time = “today”;

Hello ${name}, how are you ${time}?

上面代码中的模板字符串,都是用反引号表示。

转义符号

如果在模板字符串中需要使用反引号,则前面要用反斜杠转义。

let greeting = \Yo` World!`;

多行字符串

如果使用模板字符串表示多行字符串,所有的空格和缩进都会被保留在输出之中。

$(‘#list’).html(`

    相关文章:

    ECMAScript6介绍及环境搭建

    这实际上说明,对象的解构赋值是下面形式的简写。 let { foo: foo, bar: bar } { foo: ‘aaa’, bar: ‘bbb’ }; 也就是说,对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而…...

    什么是Azure OpenAI?

    Azure OpenAI 是微软与 OpenAI 合作推出的人工智能服务,旨在通过 Azure 云平台提供 OpenAI 的先进模型和技术。这个服务允许开发者和企业使用 OpenAI 的强大语言模型(如 GPT-3、Codex 和 DALL-E 等)来创建智能应用和解决方案。以下是一些主要…...

    一个易于使用、与Android系统良好整合的多合一游戏模拟器

    大家好,今天给大家分享的是一个易于使用、与Android系统良好整合的多合一游戏模拟器 Lemuroid。 Lemuroid 是一个专为Android平台设计的开源游戏模拟器项目,它基于强大的Libretro框架,旨在提供广泛的兼容性和卓越的用户体验。 项目介绍 Lem…...

    java spring注解的使用

    Java Spring框架中的注解用于简化代码的编写和配置工作。它们提供了一种简洁、强大和灵活的方式来定义和配置Spring应用程序。 下面是一些常用的Java Spring注解的使用示例: Component: 标记一个类为Spring容器管理的Bean,可用于任何类。 Component p…...

    什么是数据同步?数据同步时发生中断怎么办?

    数据同步是将数据从一个系统或平台复制到另一个系统或平台的过程。在现代信息化时代,数据同步变得越来越重要,因为组织需要在不同的系统之间共享数据,并确保数据的准确性和一致性。本文将介绍什么是数据同步以及数据同步中常出现的问题&#…...

    HarmonyOS Next开发学习手册——ExtensionAbility

    概述 EmbeddedUIExtensionAbility 是EMBEDDED_UI类型的ExtensionAbility组件,提供了跨进程界面嵌入的能力。 EmbeddedUIExtensionAbility需要和 EmbeddedComponent 一起配合使用,开发者可以在UIAbility的页面中通过EmbeddedComponent嵌入本应用的Embed…...

    如何开发企业微信SCRM

    企业微信SCRM(Social Customer Relationship Management)是一种用于管理和优化企业与客户关系的工具,它整合了社交媒体和CRM系统,帮助企业更有效地跟进销售线索、提供客户服务和进行市场营销。以下是开发企业微信SCRM的一些关键步…...

    Java中的标准注解与数据校验:深入解析与实例

    目录 Java中的标准注解与数据校验:深入解析与实例1. 基础校验注解NonNullNotBlankSize 2. 数值校验注解Min & MaxPositive & Negative 3. 枚举与模式匹配自定义注解示例(概念性展示) 4. 自定义校验逻辑结论 Java中的标准注解与数据校…...

    模型泛化性测试

    文章目录 准备工作场景描述训练数据集获取与训练 测试结论测试方案外机进行平移外机进行旋转外机即平移又旋转该螺纹孔位置 准备工作 场景描述 场景搭建如下如所示: 在该场景中,将机器人安置在桌子左上角处(以面对显示器的视野&#xff09…...

    智能推荐系统:技术解析与实践指南

    智能推荐系统:技术解析与实践指南 背景与挖掘目标 在互联网信息爆炸的今天,用户在海量内容中筛选感兴趣的信息变得日益困难。因此,搜索引擎结合推荐系统的模式应运而生。本章节将深入探讨推荐系统,其核心目标如下: …...

    盛元广通数字孪生智能集控实验室管理系统

    盛元广通数字孪生智能集控实验室管理系统可广泛应用于各类实验室场景,包括科研实验室、教学实验室、工业实验室等。通过实时监测、预测性维护、故障诊断与优化等功能,该系统能够提高实验室的运行效率、安全性和可靠性,降低运维成本。设计直观…...

    Spring Boot 优雅进行数据脱敏

    文详细解析在Spring Boot应用中优雅地脱敏敏感信息&#xff0c;如手机号、邮箱、身份证等&#xff0c;使用的是Jackson库中的JsonSerializer。 1. 创建自定义脱敏序列化器 首先&#xff0c;创建一个继承自JsonSerializer<String>的序列化器。以MobileSerializer为例&am…...

    Vue3 条件语句

    Vue3 条件语句 在Vue.js 3.x版本中&#xff0c;条件语句是一种常用的功能&#xff0c;用于根据特定条件渲染不同的DOM元素。Vue提供了几种方式来实现条件渲染&#xff0c;包括v-if、v-else-if、v-else以及v-show。本文将详细介绍这些条件语句的用法&#xff0c;并通过示例来展…...

    小白想要快速学好office办公软件,主要学习以下几个方面?

    Office办公软件培训通常包括以下几个核心内容&#xff1a; 1.**Word文档处理**&#xff1a;学习如何创建、编辑、格式化文本&#xff0c;插入图片、表格和图表&#xff0c;调整页面布局和样式&#xff0c;以及进行文档打印和共享。 2.**Excel电子表格**&#xff1a;掌握如…...

    【Linux文件系统】被打开的文件与文件系统的文件之间的关联刨析总结

    操作系统管理物理内存以及与外设磁盘硬件进行数据的交换 操作系统如何管理物理内存呢&#xff1f; 其实操作系统内核先对内存先描述再组织的&#xff01;操作系统管理内存的基本单位是4KB&#xff0c;操作系统会为每一个4KB大小的物理内存块创建一个描述该4KB内存块的struct pa…...

    爱迪特两年创业板上市路:销售费用率远高同行,侵权风险引关注

    《港湾商业观察》施子夫 王璐 从2022年4月7日就冲刺创业板的爱迪特&#xff08;秦皇岛&#xff09;科技股份有限公司&#xff08;以下简称&#xff0c;爱迪特&#xff09;&#xff0c;预计将很快登陆资本市场。 爱迪特日前披露中签结果&#xff1a;本次发行股份数量为约1902…...

    SQLite 与 Python:集成与使用

    SQLite 与 Python:集成与使用 SQLite 是一种轻量级的数据库管理系统,而 Python 是一种广泛使用的高级编程语言。这两种技术可以很好地结合在一起,为开发者提供强大的数据管理能力。本文将探讨如何在 Python 中集成和使用 SQLite,包括基本概念、安装过程、关键函数以及实际…...

    【vue scrollTo 数据无限滚动 】

    vue数据无限滚动 参考来源 Vue3 实现消息无限滚动的新思路 —— 林三心不学挖掘机 完整代码中项目中使用了vuetify&#xff0c;估div内的class会代表了对应的样式&#xff0c;根据需要自行删减。 功能实现主要依赖js代码部分。 鼠标悬浮停止滚动&#xff0c;鼠标离开恢复滚动在…...

    MinIO在Linux环境中的使用

    MinIO 是一个高性能的对象存储服务&#xff0c;兼容 Amazon S3 API。它设计用于大规模数据存储&#xff0c;可以很好地处理大数据集和高并发请求。如果你想在 Linux 系统上安装 MinIO&#xff0c;并开放必要的端口以便外部访问。 Vmware下载安装和linux安装这里就不在赘述了&a…...

    免费内网穿透工具 ,快解析内网穿透解决方案

    在IPv4公网IP严重不足的环境下&#xff0c;内网穿透技术越来越多的被人们所使用&#xff0c;使用内网穿透技术的好处有很多。 1&#xff1a;无需公网ip 物以稀为贵&#xff0c;由于可用的公网IP地址越来越少&#xff0c;价格也是水涨船高&#xff0c;一个固定公网IP一年的成本…...

    5个简单步骤彻底解决MoviePilot连接TheMovieDb异常问题

    5个简单步骤彻底解决MoviePilot连接TheMovieDb异常问题 【免费下载链接】MoviePilot NAS媒体库自动化管理工具 项目地址: https://gitcode.com/gh_mirrors/mo/MoviePilot MoviePilot作为一款优秀的NAS媒体库自动化管理工具&#xff0c;为你提供了便捷的影视资源管理体验…...

    TSSP77038红外解调器:从原理到实战,打造高可靠接近传感与光束中断系统

    1. 项目概述&#xff1a;从“遥控”到“感知”的红外新思路在嵌入式开发和电子制作领域&#xff0c;红外&#xff08;IR&#xff09;技术几乎是每个玩家都会接触到的老朋友。我们最熟悉的莫过于家里的电视、空调遥控器&#xff0c;它们通过发射一串调制在38KHz载波上的红外脉冲…...

    BallonsTranslator:3分钟搞定漫画翻译的终极AI辅助工具

    BallonsTranslator&#xff1a;3分钟搞定漫画翻译的终极AI辅助工具 【免费下载链接】BallonsTranslator 深度学习辅助漫画翻译工具, 支持一键机翻和简单的图像/文本编辑 | Yet another computer-aided comic/manga translation tool powered by deeplearning 项目地址: https…...

    被安排做“脏活累活”怎么办?聪明人把它变成了核心竞争力

    在软件测试的职业旅程中&#xff0c;几乎每一位从业者都会遇到这样的时刻&#xff1a;领导把最繁琐的模块分给你&#xff0c;把重复度最高的回归用例交给你&#xff0c;把无人问津的旧系统兼容性测试派给你。这些任务往往技术含量看似不高、耗时巨大且难以在简历上写出亮点&…...

    LZ4与ZSTD压缩算法在LLM内存优化中的硬件实现对比

    1. 项目概述&#xff1a;压缩算法在LLM内存优化中的关键作用 在大型语言模型&#xff08;LLM&#xff09;推理过程中&#xff0c;内存带宽和容量一直是制约性能的关键瓶颈。特别是随着模型规模的不断扩大&#xff0c;KV缓存&#xff08;Key-Value Cache&#xff09;所占用的内存…...

    扣图操作方法完全指南:2026年最实用的AI一键抠图工具推荐

    说起扣图&#xff0c;我相信很多人都有过这样的经历——花半天时间用PS的钢笔工具精心描绘边界&#xff0c;最后还是差强人意。或者为了给证件照换个背景&#xff0c;反复调整参数却效果一般。今天我就来分享一下2026年最实用的扣图操作方法&#xff0c;以及那些真正能救命的工…...

    如何用免费开源工具彻底解决Dell G15散热问题:3步终极控制方案

    如何用免费开源工具彻底解决Dell G15散热问题&#xff1a;3步终极控制方案 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 你是否正在为Dell G15游戏本的散热问…...

    Taotoken助力初创团队以可控成本集成大模型能力

    &#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken助力初创团队以可控成本集成大模型能力 为产品添加智能对话功能是许多初创团队提升用户体验的关键一步。然而&#xff0c;…...

    Zynq MPSoC实战:从官方Base TRD里,只抠出HDMI输入+DP显示这一个功能(Vivado 2020.1 + Petalinux)

    Zynq MPSoC实战&#xff1a;精准剥离HDMI输入与DP显示功能的工程精简指南 面对Xilinx官方提供的Base TRD参考设计&#xff0c;许多开发者都会被其庞大的规模所震撼——12000行代码、数十个功能模块交织在一起&#xff0c;就像一个功能齐全但臃肿不堪的"瑞士军刀"。本…...

    终极分子绘图工具Ketcher:免费在线化学结构编辑器完整指南

    终极分子绘图工具Ketcher&#xff1a;免费在线化学结构编辑器完整指南 【免费下载链接】ketcher Web-based molecule sketcher 项目地址: https://gitcode.com/gh_mirrors/ke/ketcher 还在为复杂的化学结构绘图而烦恼吗&#xff1f;传统绘图工具操作繁琐、格式兼容性差、…...