ES6基础之展开语法(Spread syntax)


Posted in Javascript onFebruary 21, 2019

展开语法用"..."进行表示,展开语法将可迭代的对象拆分成独立的值(语法层面展开)。扩展语法通常用于将可迭代的对象的值传递到函数的参数中。今天小编将从以下方面进行介绍:

  • 函数传参中的应用
  • 数组的相关应用
  • 剩余参数的应用
  • 函数传参中的应用

ES6之前,如果我们希望将数组作为参数分别传递给函数中的参数,我们可以使用Function的apply()方法。如下段代码所示:

function myFunction(a, b) {
 return a + b;
}
var data = [1, 4];
var result = myFunction.apply(null, data);
console.log(result); //Output "5”

从上述代码,apply方法接受一个数组,将它们分拆成单独参数传递函数进行调用。

ES6的展开语法能让我们以更简洁的方式进行调用,如下段代码所示:

function myFunction(a, b) {
  return a + b; 
}
let data = [1, 4];
let result = myFunction(...data);
console.log(result); //Output "5”

代码运行期间,JavaScript解释器调用myFunction之前,将会用1,4表达式替换...运算符:

let result = myFunction(...data);

上述代码将会进行如下转换:

let result = myFunction(1,4);

替换后,函数中的代码将会继续执行。

数组的相关应用

数组的合并

展开语法可将数组添加到另外一个数组中,成为其中的一部分。

let array1 = [2,3,4];
let array2 = [1, ...array1, 5, 6, 7];
console.log(array2); //Output "1, 2, 3, 4, 5, 6, 7”

代码运行期间,如下代码:

let array2 = [1, ...array1, 5, 6, 7];

上述代码将会替换成如下代码:

let array2 = [1, 2, 3, 4, 5, 6, 7];

在push方法中的运用

有时候,我们需要将一个数组的内容追加到另一个数组中,ES6之前我们可以这么做,如下段代码所示:

var array1 = [2,3,4];
var array2 = [1];
Array.prototype.push.apply(array2, array1);
console.log(array2); //Output "1, 2, 3, 4”

ES6的展开语法能以更简洁的形式实现,如下段代码所示:

let array1 = [2,3,4];
let array2=[1];
array2.push(...array1);
console.log(array2); //Output "1, 2, 3, 4”

代码运行期间,如下代码:

array2.push(...array1);

上述代码将会替换成如下代码:

array2.push(2, 3, 4);

传递多个数组参数

我们可以使用展开语法传递多个数组进行参数传递,如下段代码所示:

let array1 = [1];
let array2 = [2];
let array3 = [...array1, ...array2, ...[3, 4]];//multi arrayspread
let array4 = [5];
function myFunction(a, b, c, d, e) {
 return a+b+c+d+e;
}
let result = myFunction(...array3, ...array4); //multi array spread
console.log(result); //Output "15”

剩余参数的应用

我们知道JS函数内部有个arguments对象,可以拿到全部实参。现在ES6给我们带来了一个新的对象,可以拿到除开始参数外的参数,即剩余参数,我们可以使用展开语法...进行获取。

ES6之前,我们可以这样获取剩余参数,如下段代码所示:

function myFunction(a, b) {
  const args = Array.prototype.slice.call(arguments, myFunction.length);
  console.log(args);
}
myFunction(1, 2, 3, 4, 5); //Output "3, 4, 5”

ES6中,上述代码我们可以这样改下,如下段代码所示:

function myFunction(a, b, ...args) {
  console.log(args); //Output "3, 4, 5"
}
myFunction(1, 2, 3, 4, 5);

是不是很简单,有个我们需要注意的事,一旦函数中的参数第一个参数使用剩余参数,就不能声明第二个非剩余参数,否则将会抛出错误。例如下段代码所示:

function fn(...rest,foo) {} 
//Output "SyntaxError: Rest parameter must be last formal parameter"

小节

今天的内容就到这里,展开语法是不是特别的酷啊,在日后的开发中,我们尽量使用新的语法糖替代旧的写法。让我们代码看起来更加干净、整洁、易懂。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
一直复略了的一个问题,关于表单重复提交
Feb 15 Javascript
jquery 指南/入门基础
Nov 30 Javascript
jquery蒙版控件实现代码
Dec 08 Javascript
JS判断元素为数字的奇异写法分享
Aug 01 Javascript
js判断页面中是否有指定控件的简单实例
Mar 04 Javascript
6种javascript显示当前系统时间代码
Dec 01 Javascript
JS组件Bootstrap dropdown组件扩展hover事件
Apr 17 Javascript
简单实现node.js图片上传
Dec 18 Javascript
ES6实现的遍历目录函数示例
Apr 07 Javascript
JavaScript定义函数的三种实现方法
Sep 23 Javascript
Angular resolve基础用法详解
Oct 03 Javascript
vue之组件内监控$store中定义变量的变化详解
Nov 08 Javascript
ES6基础之默认参数值
Feb 21 #Javascript
微信小程序HTTP接口请求封装的实现
Feb 21 #Javascript
微信小程序控制台提示warning:Now you can provide attr "wx:key" for a "wx:for" to improve performance解决方法
Feb 21 #Javascript
Element-UI中Upload上传文件前端缓存处理示例
Feb 21 #Javascript
详解Puppeteer前端自动化测试实践
Feb 21 #Javascript
javascript中join方法实例讲解
Feb 21 #Javascript
React 组件渲染和更新的实现代码示例
Feb 21 #Javascript
You might like
php中如何同时使用session和cookie来保存用户登录信息
2013/07/05 PHP
PHP中if和or运行效率对比
2014/12/12 PHP
php删除文本文件中重复行的方法
2015/04/28 PHP
laravel 出现command not found问题的解决方案
2019/10/23 PHP
JS 判断代码全收集
2009/04/28 Javascript
javascript与CSS复习(二)
2010/06/29 Javascript
关于Javascript模块化和命名空间管理的问题说明
2010/12/06 Javascript
jquery blockUI 遮罩不能消失与不能提交的解决方法
2011/09/17 Javascript
JQuery工具函数汇总
2015/06/15 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
2017/05/24 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
2018/12/25 Javascript
Vue表情输入组件 微信face表情组件
2019/02/11 Javascript
详解Vue demo实现商品列表的展示
2019/05/07 Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
2019/12/04 Javascript
vue监听滚动事件的方法
2020/12/21 Vue.js
python批量导出导入MySQL用户的方法
2013/11/15 Python
python中的编码知识整理汇总
2016/01/26 Python
Python自定义进程池实例分析【生产者、消费者模型问题】
2016/09/19 Python
Python中int()函数的用法浅析
2017/10/17 Python
使用Python获取并处理IP的类型及格式方法
2018/11/01 Python
python+logging+yaml实现日志分割
2019/07/22 Python
Python实现多线程/多进程的TCP服务器
2019/09/03 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
2019/12/25 Python
django xadmin 管理器常用显示设置方式
2020/03/11 Python
浅谈numpy中函数resize与reshape,ravel与flatten的区别
2020/06/18 Python
Css3+Js制作漂亮时钟(附源码)
2013/04/24 HTML / CSS
英国受欢迎的运动鞋和街头服装商店:Footasylum
2018/06/12 全球购物
应聘教师自荐信
2013/10/12 职场文书
员工团队活动方案
2014/08/28 职场文书
本溪水洞导游词
2015/02/11 职场文书
2015年妇委会工作总结
2015/05/22 职场文书
毕业实习证明范本
2015/06/16 职场文书
学校运动会简讯
2015/07/20 职场文书
班级管理经验交流材料
2015/11/02 职场文书
高中生社会实践心得体会
2016/01/14 职场文书
golang用type-switch判断interface的实际存储类型
2022/04/14 Golang