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 相关文章推荐
JQuery 返回布尔值Is()条件判断方法代码
May 14 Javascript
jquery form 加载数据示例
Apr 21 Javascript
JavaScript判断数组是否包含指定元素的方法
Jul 01 Javascript
Jquery ajax加载等待执行结束再继续执行下面代码操作
Nov 24 Javascript
浅谈Vue的基本应用
Dec 27 Javascript
bootstrap手风琴折叠示例代码分享
May 22 Javascript
jQuery UI 实例讲解 - 日期选择器(Datepicker)
Sep 18 jQuery
web前端vue实现插值文本和输出原始html
Jan 19 Javascript
BootStrap modal实现拖拽功能
Dec 01 Javascript
JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】
Dec 12 Javascript
JS数组进阶示例【数组的几种函数用法】
Jan 16 Javascript
JS如何在不同平台实现多语言方式
Jul 16 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
curl不使用文件存取cookie php使用curl获取cookie示例
2014/01/26 PHP
PHP判断一个gif图片是否为动态图片的方法
2014/11/19 PHP
搭建Vim为自定义的PHP开发工具的一些技巧
2015/12/11 PHP
yum命令安装php7和相关扩展
2016/07/04 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
2018/05/12 PHP
Jquery 快速构建可拖曳的购物车DragDrop
2009/11/30 Javascript
javascript new fun的执行过程
2010/08/05 Javascript
javaScript让文本框内的最后一个文字的后面获得焦点实现代码
2013/01/06 Javascript
nodejs教程 安装express及配置app.js文件的详细步骤
2013/05/11 NodeJs
深入理解Javascript里的依赖注入
2014/03/19 Javascript
按钮接受回车事件的三种实现方法
2014/06/06 Javascript
浅谈JavaScript字符串拼接
2015/06/25 Javascript
angularjs客户端实现压缩图片文件并上传实例
2015/07/06 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
2016/06/20 Javascript
Node.js实现兼容IE789的文件上传进度条
2016/09/02 Javascript
正则 js分转元带千分符号详解
2017/03/08 Javascript
基于Swiper实现移动端页面图片轮播效果
2017/12/28 Javascript
详解webpack 入门与解析
2018/04/09 Javascript
Vue路由切换时的左滑和右滑效果示例
2018/05/29 Javascript
深入浅析JS中的严格模式
2018/06/04 Javascript
iview同时验证多个表单问题总结
2018/09/29 Javascript
vue-awesome-swiper 基于vue实现h5滑动翻页效果【推荐】
2018/11/08 Javascript
微信小程序 checkbox使用实例解析
2019/09/09 Javascript
jQuery Raty星级评分插件使用方法实例分析
2019/11/25 jQuery
如何在JavaScript中创建具有多个空格的字符串?
2020/02/23 Javascript
[04:41]2014DOTA2国际邀请赛 Liquid顺利突围晋级正赛
2014/07/09 DOTA
对python的bytes类型数据split分割切片方法
2018/12/04 Python
Python 保存矩阵为Excel的实现方法
2019/01/28 Python
pandas如何处理缺失值
2019/07/31 Python
PyCharm Community安装与配置的详细教程
2020/11/24 Python
matplotlib绘制正余弦曲线图的实现
2021/02/22 Python
司机岗位职责范本
2015/04/10 职场文书
为自己工作观后感
2015/06/11 职场文书
2015年秋季开学典礼校长致辞
2015/07/16 职场文书
社区挂职锻炼个人工作总结
2015/10/23 职场文书
Java 中的 Unsafe 魔法类的作用大全
2021/06/26 Java/Android