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 相关文章推荐
AppBaseJs 类库 网上常用的javascript函数及其他js类库写的
Mar 04 Javascript
url地址自动加#号问题说明
Aug 21 Javascript
css transform 3D幻灯片特效实现步骤解读
Mar 27 Javascript
JS HTML5 音乐天气播放器(Ajax获取天气信息)
May 26 Javascript
详解JavaScript的Date对象(制作简易钟表)
Apr 07 Javascript
超实用的JavaScript表单代码段
Feb 26 Javascript
深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解
Apr 03 Javascript
详解jQuery停止动画——stop()方法的使用
Dec 14 Javascript
日期时间范围选择插件:daterangepicker使用总结(必看篇)
Sep 14 Javascript
使用JavaScript实现在页面中显示距离2017年中秋节的天数
Sep 26 Javascript
vue debug 二种方法
Sep 16 Javascript
微信小程序页面间值传递的两种方法
Nov 26 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文件上传的简单实例
2013/10/19 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
2015/06/23 PHP
PHP文件操作之获取目录下文件与计算相对路径的方法
2016/01/08 PHP
php查询及多条件查询
2017/02/26 PHP
PHP多个图片压缩成ZIP的方法
2020/08/18 PHP
php实现的顺序线性表示例
2019/05/04 PHP
javascript 表单的友好用户体现
2009/01/07 Javascript
js网页版计算器的简单实现
2013/07/02 Javascript
使用jQuery实现的掷色子游戏动画效果
2014/03/14 Javascript
javascript制作网页图片上实现下雨效果
2015/02/26 Javascript
JS实现很实用的对联广告代码(可自适应高度)
2015/09/18 Javascript
jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法
2017/03/08 Javascript
解析jquery easyui tree异步加载子节点问题
2017/03/08 Javascript
在使用JSON格式处理数据时应该注意的问题小结
2017/05/20 Javascript
使用javaScript实现鼠标拖拽事件
2020/04/03 Javascript
如何制作一个Node命令行图像识别工具
2018/12/12 Javascript
如何使用JavaScript检测空闲的浏览器选项卡
2020/05/28 Javascript
python数据结构之二叉树的统计与转换实例
2014/04/29 Python
把项目从Python2.x移植到Python3.x的经验总结
2015/04/20 Python
Python多线程及其基本使用方法实例分析
2019/10/29 Python
PyTorch实现重写/改写Dataset并载入Dataloader
2020/07/14 Python
逼真的HTML5树叶飘落动画
2016/03/01 HTML / CSS
国际鲜花速递专家:Floraqueen
2016/11/24 全球购物
.NET remoting中对象激活的两种方式
2015/06/08 面试题
大学三年的自我评价
2013/12/25 职场文书
交通事故私了协议书
2014/04/16 职场文书
会计岗位说明书
2014/07/29 职场文书
小学生放飞梦想演讲稿
2014/08/26 职场文书
保密工作承诺书
2014/08/29 职场文书
小学生成绩单评语
2014/12/31 职场文书
班主任工作实习计划
2015/01/16 职场文书
迎新生欢迎词
2015/01/23 职场文书
求职简历自我评价范文
2015/03/10 职场文书
2015年仓库管理员工作总结
2015/04/21 职场文书
客户答谢会致辞
2015/07/30 职场文书
vue @click.native 绑定原生点击事件
2022/04/22 Vue.js