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

ES6-rest参数、数组扩展中的扩展运算符

rest 参数

形式为(...变量名)  rest参数搭配的变量是一个数组,该变量将多余的参数放入其中。

function add(...values) {
  console.log(values)
}
add(2, 5, 3)

//[3, 4, 5]

数组的扩展(...), 如同rest参数的逆运算,将一个数组转为用逗号分隔的参数序列。

console.log(...[1, 2, 3])
// 1 2 3

扩展运算符主要用于函数调用。

function push(array, ...items) {
  array.push(...items);
}
function add(x, y) {
  return x + y;
}
var numbers = [4, 38];
add(...numbers); // 42

array.push(...items) 和 add(...numbers) 都是函数的调用。它们都是用了扩展运算符。该运算符可以将一个数组变为参数序列。

替代数组的apply 方法

由于扩展运算符可以展开数组,所以不再需要使用apply 方法将数组转为函数的参数。

//es5 写法
function f(x, y, z) {
  //....
};
var args = [1, 2, 3];
f.apply(null, args);

//es6 写法
function f(x, y, z) {
  //....
};
var args = [1, 2, 3];
f(...args);

下面是扩展运算符取代apply 方法的一个实际例子: 应用Math.max方法简化求出一个数组中的最大元素。

//ES5的写法
Math.max.apply(null, [14, 3, 77])
//ES6的写法
Math.max(...[14, 3, 77])
//等同于
Matn.max(14, 3, 77)

另一个例子:通过push函数将一个数组添加到另一个数组的尾部。

//es5 写法
var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];
Array.prototype.push.apply(arr1, arr2)
//es6 写法
arr1.push(...arr2);

扩展运算符的应用

合并数组

扩展运算符提供了数组合并的新写法

//es5
[1, 2].concat(more)
//es6
[1, 2, ...more]

var arr1 = ['a', 'b']
var arr2 = ['c']
var arr3 = ['d', 'e']
//es5 合并
arr1.concat(arr2, arr3)
//es6 合并
[...arr1, ...arr2, ...arr3]
和解构赋值结合

扩展运算符可以和结构赋值结合起来,用于生成数组。

// es5
a = list[0], rest = list.slice(1)
// es6
[a, ...rest] = list
// 下面是另外一些例子
const [first, ...rest] = [1, 2, 3, 4, 5];
first // 1
rest  // [2, 3, 4, 5]

const [first, ...rest] = [];
first // undefined
rest // []

const [first, ...rest] = ['foo']
first //'foo'
rest  // []
如果将扩展运算符用于数组赋值, 则智能将其放在参数的最后一位,否则会报错。


http://www.kler.cn/a/533167.html

相关文章:

  • Docker Hub 镜像 Pull 失败的解决方案
  • 软件工程导论三级项目报告--《软件工程》课程网站
  • 【Git】一、初识Git Git基本操作详解
  • Windows图形界面(GUI)-QT-C/C++ - QT Frame
  • e2studio开发RA4M2(6)----GPIO外部中断(IRQ)配置
  • AI大模型(二)基于Deepseek搭建本地可视化交互UI
  • CPU、MCU、MPU、SOC、DSP、ECU、GPU、FPGA傻傻分不清楚?一文讲清它们的区别
  • (十一)机器人系统的仿真——建造机器人模型
  • 4. k8s二进制集群之ETCD集群证书生成
  • Vue.js组件开发-实现右下角浮动层可以最大化最小化效果
  • RGB565转BITMAP[C#---2]
  • Vim的基础命令
  • Go语言中结构体字面量
  • 2022年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题2)-网络部分解析-附详细代码
  • 【人工智能】掌握图像风格迁移:使用Python实现艺术风格的自动化迁移
  • ChatGPT提问技巧:行业热门应用提示词案例--咨询法律知识
  • git进阶--5---git reset 和 git revert 的区别与联系
  • TypeScript 学习指南
  • 【Python深入浅出】解锁Python3模块:从入门到实战的进阶指南
  • OSPF基础(2)
  • python venv 虚拟环境安装以及使用
  • Linux 系统上安装 Docker 方法详解与比较
  • C++ 类与对象(中)
  • oracle: 索引失效的情况
  • python-异常处理笔记
  • pwn环境搭建手册(步骤清晰且附带详细命令)