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 相关文章推荐
javascript 在网页中的运用(asp.net)
Nov 23 Javascript
jquery ui resizable bug解决方法
Oct 26 Javascript
javascript闭包的高级使用方法实例
Jul 04 Javascript
JavaScript和jquery获取父级元素、子级元素、兄弟元素的方法
Jun 05 Javascript
BootStrap智能表单实战系列(八)表单配置json详解
Jun 13 Javascript
JS基于面向对象实现的多个倒计时器功能示例
Feb 28 Javascript
vue+element-ui动态生成多级表头的方法
Aug 28 Javascript
vue 的点击事件获取当前点击的元素方法
Sep 15 Javascript
jquery分页优化操作实例分析
Aug 23 jQuery
layui 根据后台数据动态创建下拉框并同时默认选中的实例
Sep 02 Javascript
js计时事件实现圆形时钟
Mar 25 Javascript
vue打包npm run build时候界面报错的解决
Aug 13 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微信红包的算法探讨
2016/07/21 PHP
Laravel中批量赋值Mass-Assignment的真正含义详解
2017/09/29 PHP
如何使用jQuery来处理图片坏链具体实现步骤
2013/05/02 Javascript
javascript表单验证使用示例(javascript验证邮箱)
2014/01/07 Javascript
在JavaScript中使用对数Math.log()方法的教程
2015/06/15 Javascript
Javascript编写俄罗斯方块思路及实例
2015/07/07 Javascript
jquery实现简单实用的弹出层效果代码
2015/10/15 Javascript
jquery 获取select数组与name数组长度的实现代码
2016/06/20 Javascript
基于chosen插件实现人员选择树搜索自动筛选功能
2016/09/24 Javascript
Ztree新增角色和编辑角色回显问题的解决
2016/10/25 Javascript
概述如何实现一个简单的浏览器端js模块加载器
2016/12/07 Javascript
ES6中module模块化开发实例浅析
2017/04/06 Javascript
Vue.js鼠标悬浮更换图片功能
2017/05/17 Javascript
jQuery制作全屏宽度固定高度轮播图(实例讲解)
2017/07/08 jQuery
JavaScript监听手机物理返回键的两种解决方法
2017/08/14 Javascript
angularjs实现过滤并替换关键字小功能
2017/09/19 Javascript
详解javascript常用工具类的封装
2018/01/30 Javascript
vue组件实现可搜索下拉框扩展
2020/10/23 Javascript
Vue中 key keep-alive的实现原理
2018/09/18 Javascript
vue实现多组关键词对应高亮显示功能
2019/07/25 Javascript
Element-ui el-tree新增和删除节点后如何刷新tree的实例
2020/08/31 Javascript
在react项目中使用antd的form组件,动态设置input框的值
2020/10/24 Javascript
微信小程序实现弹幕墙(祝福墙)
2020/11/18 Javascript
[01:02]DOTA2辉夜杯决赛日 CDEC.Y对阵VG赛前花絮
2015/12/27 DOTA
使用Python的Django框架实现事务交易管理的教程
2015/04/20 Python
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
2018/03/15 Python
使用numpngw和matplotlib生成png动画的示例代码
2021/01/24 Python
免税水晶:Duty Free Crystal
2019/05/13 全球购物
领先的荷兰线上超市:荷兰之家Holland at Home(支持中文)
2021/01/21 全球购物
C#如何调用Windows程序打开一个文档
2014/12/26 面试题
北体毕业生求职信
2014/02/28 职场文书
《中国梦我的梦》中学生演讲稿
2014/08/20 职场文书
钳工实训报告总结
2014/11/04 职场文书
2015年挂职锻炼工作总结
2014/12/12 职场文书
python中os.path.join()函数实例用法
2021/05/26 Python
Sleuth+logback 设置traceid 及自定义信息方式
2021/07/26 Java/Android