千家信息网

es6中三个点指的是什么意思

发表于:2025-02-22 作者:千家信息网编辑
千家信息网最后更新 2025年02月22日,这篇文章给大家分享的是有关es6中三个点指的是什么意思的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在es6中,三个点"..."指的是"扩展运算符",可以在函数调用或数组构
千家信息网最后更新 2025年02月22日es6中三个点指的是什么意思

这篇文章给大家分享的是有关es6中三个点指的是什么意思的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

在es6中,三个点"..."指的是"扩展运算符",可以在函数调用或数组构造时,将数组表达式或者string在语法层面展开;也可以在构造字面量对象时将对象表达式按照"key-value"的方式展开。

本教程操作环境:windows7系统、ECMAScript 6版、Dell G3电脑。

es6中三个点是什么意思

三个点(...)真名叫扩展运算符,是在ES6中新增加的内容,它可以在函数调用/数组构造时,将数组表达式或者string在语法层面展开;还可以在构造字面量对象时将对象表达式按照key-value的方式展开

字面量一般指[1,2,3]或者{name:'chuichui'}这种简洁的构造方式,多层嵌套的数组和对象三个点就无能为力了

说白了就是把衣服脱了,不管是大括号([])、花括号({}),统统不在话下,全部脱掉脱掉!

// 数组var number = [1,2,3,4,5,6]console.log(...number) //1 2 3 4 5 6//对象var man = {name:'chuichui',height:176}console.log({...man}) / {name:'chuichui',height:176}

扩展运算符的8种用法

1. 拷贝数组对象

使用扩展符拷贝数组是ES6中常用的操作:

const years = [2018, 2019, 2020, 2021];const copyYears = [...years];console.log(copyYears); // [ 2018, 2019, 2020, 2021 ]

扩展运算符拷贝数组,只有第一层是深拷贝,即对一维数组使用扩展运算符拷贝就属于深拷贝,看下面的代码:

const miniCalendar = [2021, [1, 2, 3, 4, 5, 6, 7], 1];const copyArray = [...miniCalendar];console.log(copyArray); // [ 2021, [ 1, 2, 3, 4, 5, 6, 7 ], 1 ]copyArray[1][0] = 0;copyArray[1].push(8);copyArray[2] = 2;console.log(copyArray); // [ 2021, [ 0, 2, 3, 4, 5, 6, 7, 8 ], 2 ]console.log(miniCalendar); // [ 2021, [ 0, 2, 3, 4, 5, 6, 7, 8 ], 1 ]

把打印的结果放在一起便于更加清楚进行对比,如下:

变量说明结果操作
copyArray[ 2021, [ 1, 2, 3, 4, 5, 6, 7 ], 1 ]复制数组 miniCalendar
copyArray[ 2021, [ 0, 2, 3, 4, 5, 6, 7, 8 ], 2 ]1. 将数组第二个元素的第一个元素重新赋值为 0 ;2. 往数组的第二个元素增加一个元素 8 ;3. 将数组第三个元素重新赋值为2
miniCalendar[ 2021, [ 0, 2, 3, 4, 5, 6, 7, 8 ], 1 ]从结果来看,数组的第二个元素为数组,大于1维了,里面的元素的变更将导致原变量的值随之改变

拷贝对象,代码如下:

const time = {    year: 2021,    month: 7,    day: {        value: 1,    },};const copyTime = { ...time };console.log(copyTime); // { year: 2021, month: 7, day: { value: 1 } }

扩展运算符拷贝对象只会在一层进行深拷贝,从下面代码是基于上面代码:

copyTime.day.value = 2;copyTime.month = 6;console.log(copyTime); // { year: 2021, month: 6, day: { value: 2 } }console.log(time); // { year: 2021, month: 7, day: { value: 2 } }

从打印的结果看,扩展运算符只对对象第一层进行了深拷贝。

严格来讲,扩展运算符不执行深拷贝

2. 合并操作

先来看数组的合并,如下:

const halfMonths1 = [1, 2, 3, 4, 5, 6];const halfMonths2 = [7, 8, 9, 10, 11, 12];const allMonths = [...halfMonths1, ...halfMonths2];console.log(allMonths); // [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]

合并对象,在合并对象时,如果一个键已经存在,它会被具有相同键的最后一个对象给替换。

const time1 = {    month: 7,    day: {        value: 1,    },};const time2 = {    year: 2021,    month: 8,    day: {        value: 10,    },};const time = { ...time1, ...time2 };console.log(time); // { month: 8, day: { value: 10 }, year: 2021 }

3. 参数传递

const sum = (num1, num2) => num1 + num2;console.log(sum(...[6, 7])); // 13console.log(sum(...[6, 7, 8])); // 13

从上面的代码看,函数定义了多少个参数,扩展运算符传入的值就是多少个。

math 函数一起使用,如下:

const arrayNumbers = [1, 5, 9, 3, 5, 7, 10];const min = Math.min(...arrayNumbers);const max = Math.max(...arrayNumbers);console.log(min); // 1console.log(max); // 10

4. 数组去重

Set 一起使用消除数组的重复项,如下:

const arrayNumbers = [1, 5, 9, 3, 5, 7, 10, 4, 5, 2, 5];const newNumbers = [...new Set(arrayNumbers)];console.log(newNumbers); // [ 1,  5, 9, 3, 7, 10, 4, 2 ]

5. 字符串转字符数组

String 也是一个可迭代对象,所以也可以使用扩展运算符 ... 将其转为字符数组,如下:

const title = "china";const charts = [...title];console.log(charts); // [ 'c', 'h', 'i', 'n', 'a' ]

进而可以简单进行字符串截取,如下:

const title = "china";const short = [...title];short.length = 2;console.log(short.join("")); // ch

6. NodeList 转数组

NodeList 对象是节点的集合,通常是由属性,如 Node.childNodes 和方法,如 document.querySelectorAll 返回的。

NodeList 类似于数组,但不是数组,没有 Array 的所有方法,例如findmapfilter 等,但是可以使用 forEach() 来迭代。

可以通过扩展运算符将其转为数组,如下:

const nodeList = document.querySelectorAll(".row");const nodeArray = [...nodeList];console.log(nodeList);console.log(nodeArray);

7. 解构变量

解构数组,如下:

const [currentMonth, ...others] = [7, 8, 9, 10, 11, 12];console.log(currentMonth); // 7console.log(others); // [ 8, 9, 10, 11, 12 ]

解构对象,如下:

const userInfo = { name: "Crayon", province: "Guangdong", city: "Shenzhen" };const { name, ...location } = userInfo;console.log(name); // Crayonconsole.log(location); // { province: 'Guangdong', city: 'Shenzhen' }

8. 打印日志

在打印可迭代对象的时候,需要打印每一项可以使用扩展符,如下:

const years = [2018, 2019, 2020, 2021];console.log(...years); // 2018 2019 2020 2021

感谢各位的阅读!关于"es6中三个点指的是什么意思"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

数组 对象 拷贝 运算符 运算 三个 元素 代码 函数 字符 结果 表达式 意思 内容 变量 字面 方式 迭代 参数 字符串 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 python 数据库比较 软件开发团队降薪 某软件开发包含四个活动 华为ai音响数据库 陕西企业党建软件开发专业制作 初中网络技术应用教案 崔泽鹏软件开发 文献四大数据库是哪几个 csgo如何改服务器名字 数据库怎么查最新的10条数据 无线网络技术都有哪些 数据库数据的读取数据库 西单购物软件开发 全球的主服务器在哪里 播放网络安全一首潮汐 网络技术人员是什么意思 查询为提交事务的数据库 人力资源数据库 如何设计 浙江app软件开发有用吗 西安软件开发中心工行 知乎 企业中网络技术员心得体会 中企联合互联网科技有限公司 博雅数据库的可靠性 总部在北京的互联网科技公司 远程读取公司服务器文件 萌宠呈祥以前开的服务器进不去 网络安全ppt课件免费英语 企业网络安全检测工具是 表结构设计连接数据库报126 德国网络安全公司怎么样
0