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 相关文章推荐
用jscript实现列出安装的软件列表
Jun 18 Javascript
JavaScript 拾漏补遗
Dec 27 Javascript
前后台交互过程中json格式如何解析以及如何生成
Dec 26 Javascript
jquery实现的随机多彩tag标签随机颜色和字号大小效果
Mar 27 Javascript
通过Jquery的Ajax方法读取将table转换为Json
May 31 Javascript
Javascript实现计算个人所得税
May 10 Javascript
javascript汉字拼音互转的简单实例
Oct 09 Javascript
完美的js图片轮换效果
Feb 05 Javascript
浅谈Angular4实现热加载开发旅程
Sep 08 Javascript
Vue中使用vue-i18插件实现多语言切换功能
Apr 25 Javascript
vue.js使用v-model实现表单元素(input) 双向数据绑定功能示例
Mar 08 Javascript
webpack优化之代码分割与公共代码提取详解
Nov 22 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
file_get_contents获取不到网页内容的解决方法
2013/03/07 PHP
页面利用渐进式JPEG来提升用户体验度
2014/12/01 PHP
PHP的Yii框架的常用日志操作总结
2015/12/08 PHP
PHP实现类似题库抽题效果
2018/08/16 PHP
PHP实现的敏感词过滤方法示例
2019/03/06 PHP
php redis setnx分布式锁简单原理解析
2020/10/23 PHP
JS获取scrollHeight问题想到的标准问题
2007/05/27 Javascript
浅谈javascript 面向对象编程
2009/10/28 Javascript
JS声明变量背后的编译原理剖析
2012/12/28 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
javaScript实现滚动新闻的方法
2015/07/30 Javascript
浅析JavaScript 箭头函数 generator Date JSON
2016/05/23 Javascript
原生js实现自由拖拽弹窗代码demo
2016/06/29 Javascript
Nodejs从有门道无门菜鸟起飞必看教程
2016/07/20 NodeJs
浅析jQuery操作select控件的取值和设值
2016/12/07 Javascript
BootStrap Datepicker 插件修改为默认中文的实现方法
2017/02/10 Javascript
解决Jquery下拉框数据动态获取的问题
2018/01/25 jQuery
基于Vue的侧边目录组件的实现
2020/02/05 Javascript
es6函数name属性功能与用法实例分析
2020/04/18 Javascript
[01:20]辉夜杯背景故事宣传片《辉夜传说》
2015/12/25 DOTA
Python中死锁的形成示例及死锁情况的防止
2016/06/14 Python
pandas series序列转化为星期几的实例
2018/04/11 Python
浅析Python装饰器以及装饰器模式
2018/05/28 Python
一看就懂得Python的math模块
2018/10/21 Python
python程序 线程队列queue使用方法解析
2019/09/23 Python
Python对Excel按列值筛选并拆分表格到多个文件的代码
2019/11/05 Python
pytorch 归一化与反归一化实例
2019/12/31 Python
python3操作注册表的方法(Url protocol)
2020/02/05 Python
Python实现Wordcloud生成词云图的示例
2020/03/30 Python
一文轻松掌握python语言命名规范规则
2020/06/18 Python
tensorflow与numpy的版本兼容性问题的解决
2021/01/08 Python
如何开发一款堪比APP的微信小程序(腾讯内部团队分享)
2016/12/22 HTML / CSS
幼儿园安全检查制度
2014/01/30 职场文书
公司门卫岗位职责
2014/03/15 职场文书
完美的中文自荐信
2014/05/24 职场文书
大学生求职信例文
2014/06/29 职场文书