ES6新增语法 扩展运算符

简介: ES6新增语法 扩展运算符


介绍:

写法 : 三个点(...)

扩展运算符,是在ES6中新增加的内容,它可以在函数调用或者数组构造的时候,将数组表达式或者string在语法层面进行展开;

我们可以直接看代码 就容易理解它是干什么的了

let str = "hello";
console.log(...str); // "h" "e" "l" "l" "o"

通过扩展运算符,我们很容易的将str这个字符串给拆开.

接下来我们多介绍一些使用扩展运算符的场景,方便更好地去理解它到底是干嘛的,怎么用,什么时候去用.

使用场景

1. 合并数组

在传统的写法里面,我们经常通过这个concat()API方法来进行数组的合并

concat() : concat()方法可以将两个多个数组合并为一个新的数组,用法如下:

const arr1 = [1, 2, 3];
 const arr2 = [4, 5, 6];
 const arr3 = arr1.concat(arr2); // [1, 2, 3, 4, 5, 6]

上述例子中,我们将 arr1arr2 数组合并成一个新的数组,并将其赋值给 arr3

然而,使用扩展运算符(...) 可以很方便地实现多个数组的合并

const arr1 = [1, 2, 3];
 const arr2 = [4, 5, 6];
 const arr3 = [...arr1,...arr2]
 console.log(arr3) // (6) [1, 2, 3, 4, 5, 6]

2.复制数组

传统的方法中,我们通常使用 slice() 方法来复制数组,例如:

const originalArray = [1, 2, 3];
const copiedArray = originalArray.slice();
console.log(copiedArray); // [1, 2, 3]

然而,使用扩展运算符可以更加简洁地复制数组,如下所示:

const originalArray = [1, 2, 3];
const copiedArray = [...originalArray];
console.log(copiedArray); // [1, 2, 3]

需要注意的是,使用扩展运算符复制数组时,复制的是数组的值不是引用。所以修改复制后的数组不会影响原始数组

const originalArray = [1, 2, 3];
const copiedArray = [...originalArray];
copiedArray.push(4);
console.log(originalArray); // [1, 2, 3]
console.log(copiedArray); // [1, 2, 3, 4]

在复制后的数组上执行 push() 操作,只会修改复制后的数组,而不会改变原始数组。

3. 数组去重

使用扩展运算符去重数组可以消除重复的元素,并返回一个新的去重后的数组。

这里我们先介绍一个es6之后新增的数据结构Set

Set(): 它只存储唯一的值,不允许重复.

const array = [1, 2, 2, 3, 4, 4, 5];
const uniqueArray = [...new Set(array)];
console.log(uniqueArray); // [1, 2, 3, 4, 5]

通过将数组传递给 Set 构造函数,我们创建了一个包含去重后的值的 Set 对象。

然后,我们使用扩展运算符将 Set 对象转换为一个新的数组。扩展运算符将 Set 对象中的每个元素展开,并将它们放入新数组中。

4. 求数组最大值,最小值. 配合Math方法使用

console.log(Math.max(...[1,2,3,4,5,6])); // 6

5. 与解构赋值搭配使用

// 解构赋值结合
const [a, ...b] = [1, 2, 3, 4, 5, 6];
console.log(a) // 1
console.log(b); // (5) [2, 3, 4, 5, 6]
const [food, ...rest] = [];
console.log(food); // undefined
console.log(rest); //[]

扩展运算符必须放在参数末尾,否则都会报错

image.png

6. 函数中的应用

function sum(a, b, c) {
  return a + b + c;
}
const numbers = [1, 2, 3];
const result = sum(...numbers);
console.log(result); // 6


目录
相关文章
|
10月前
|
机器学习/深度学习 人工智能 IDE
14B小模型代码成绩紧逼O3-Mini!DeepCoder-14B-Preview:基于Deepseek-R1蒸馏优化的开源代码生成模型
DeepCoder-14B-Preview是基于Deepseek-R1蒸馏优化的140亿参数模型,通过强化学习微调在LiveCodeBench达到60.6%准确率,开源训练数据与系统优化方案。
509 3
14B小模型代码成绩紧逼O3-Mini!DeepCoder-14B-Preview:基于Deepseek-R1蒸馏优化的开源代码生成模型
|
人工智能 自然语言处理 算法
大模型备案、登记全流程攻略
在AI浪潮下,大模型技术迅猛发展,为各行业带来变革。为确保算法安全有序发展,需进行相关备案登记。具体包括:大模型备案(面向公众提供生成式服务)、大模型登记(借助第三方大模型)、算法备案(5类算法)及双新评估(舆论属性服务)。未及时备案将面临法律处罚,备案流程涉及属地初审、中央终审等环节,周期约3-4个月。境外模型和特定行业有额外限制,备案后仍需常态化安全管理。
|
JSON JavaScript 前端开发
js的版本
【5月更文挑战第7天】js的版本
435 1
|
弹性计算 Ubuntu Linux
2024年幻兽帕鲁联机服务器搭建教程:无需配置、一键部署
幻兽帕鲁如何搭建服务器?幻兽帕鲁游戏元素非常丰富,很多小伙伴想自己和朋友玩,很多小伙伴问小编幻兽帕鲁如何搭建服务器,下面小编就为大家带来了幻兽帕鲁搭建服务器方法介绍。
|
JSON JavaScript 前端开发
移动WEB特效开发
移动WEB特效开发
|
算法 JavaScript 前端开发
带你读《图解算法小抄》十九、双指针(2)
带你读《图解算法小抄》十九、双指针(2)
108 0
什么是BASE理论?
什么是BASE理论?
245 0
|
前端开发 安全 数据安全/隐私保护
前端加密传输数据,后端解密还原数据
在项目中,我们需要在前端传入参数到服务器后端去,传入的参数带有特殊符号的话会被系统默认转义,导致我们获取不到正确的数据。
732 0
|
存储 关系型数据库 MySQL
MySQL字段类型最全解析
要了解一个数据库,我们必须了解其支持的数据类型。MySQL 支持大量的字段类型,其中常用的也有很多。前面文章我们也讲过 int 及 varchar 类型的用法,但一直没有全面讲过字段类型,本篇文章我们将把字段类型一网打尽,讲一讲常用字段类型的用法。
1472 0
MySQL字段类型最全解析
|
存储 SQL 关系型数据库
MySQL中的MVCC到底能不能解决幻读
在MySQL当中,只有使用了InnoDB存储引擎的数据库表才支持事务。 有了事务就可以用来保证数据的完整以及一致性,保证成批的SQL语句要么全部执行,要么全部不执行。 事务用来管理insert、update、delete语句。
191 0