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 相关文章推荐
js封装的textarea操作方法集合(兼容很好)
Nov 16 Javascript
7款吸引人眼球的jQuery/CSS3特效实例分享
Apr 25 Javascript
extjs 时间范围选择自动判断的实现代码
Jun 24 Javascript
jQuery中scrollLeft()方法用法实例
Jan 16 Javascript
Underscore.js常用方法总结
Feb 28 Javascript
浅谈在Vue-cli里基于axios封装复用请求
Nov 06 Javascript
浅谈node模块与npm包管理工具
Jan 03 Javascript
vue中添加与删除关键字搜索功能
Oct 12 Javascript
Angular利用HTTP POST下载流文件的步骤记录
Jul 26 Javascript
vue实现广告栏上下滚动效果
Nov 26 Vue.js
vue浏览器返回监听的具体步骤
Feb 03 Vue.js
vue中this.$http.post()跨域和请求参数丢失的解决
Apr 08 Vue.js
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 命令行参数详解及应用
2011/05/18 PHP
PHP调用VC编写的COM组件实例
2014/03/29 PHP
PHP多线程编程之管道通信实例分析
2015/03/07 PHP
Zend Framework动作助手Redirector用法实例详解
2016/03/05 PHP
php制作基于xml的RSS订阅源功能示例
2017/02/08 PHP
利用laravel+ajax实现文件上传功能方法示例
2017/08/13 PHP
javascript 写类方式之六
2009/07/05 Javascript
JavaScript中this的使用详解
2013/11/08 Javascript
搭建pomelo 开发环境
2014/06/24 Javascript
Javascript中设置默认参数值示例
2014/09/11 Javascript
PHP使用方法重载实现动态创建属性的get和set方法
2014/11/17 Javascript
JQuery+CSS实现图片上放置按钮的方法
2015/05/29 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合
2016/08/11 Javascript
Node.js中process模块常用的属性和方法
2016/12/13 Javascript
vue2.0使用swiper组件实现轮播的示例代码
2018/03/03 Javascript
jQuery实现动画、消失、显现、渐出、渐入效果示例
2018/09/06 jQuery
详解JavaScript中的强制类型转换
2019/04/15 Javascript
微信小程序图片加载失败时替换为默认图片的方法
2019/12/09 Javascript
浅谈JS for循环中使用break和continue的区别
2020/07/21 Javascript
vue项目使用$router.go(-1)返回时刷新原来的界面操作
2020/07/26 Javascript
[01:19:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第二局
2016/03/05 DOTA
[02:38]2018年度DOTA2最佳劣单位选手-完美盛典
2018/12/17 DOTA
Python交换变量
2008/09/06 Python
Python的Flask框架中集成CKeditor富文本编辑器的教程
2016/06/13 Python
Python使用正则表达式实现文本替换的方法
2017/04/18 Python
基于Django用户认证系统详解
2018/02/21 Python
PyCharm代码整体缩进,反向缩进的方法
2018/06/25 Python
python利用opencv实现SIFT特征提取与匹配
2020/03/05 Python
Django 实现将图片转为Base64,然后使用json传输
2020/03/27 Python
Cpython解释器中的GIL全局解释器锁
2020/11/09 Python
python3处理word文档实例分析
2020/12/01 Python
CSS3 渐变(Gradients)之CSS3 线性渐变
2016/07/08 HTML / CSS
西班牙最大的婴儿用品网上商店:Bebitus
2019/05/30 全球购物
四风问题查摆剖析材料
2014/10/11 职场文书
新员工试用期工作总结2015
2015/05/28 职场文书
Python趣味挑战之教你用pygame画进度条
2021/05/31 Python