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 操作日期、星期、元素的追加的实现代码
Feb 07 Javascript
jquery缓动swing liner控制动画过程不同时刻的速度
May 29 Javascript
jQuery学习笔记之jQuery原型属性和方法
Jun 09 Javascript
js变量、作用域及内存详解
Sep 23 Javascript
JS的框架Polymer中的dom-if和is属性使用说明
Jul 29 Javascript
jQuery实现别踩白块儿网页版小游戏
Jan 18 Javascript
jQuery插件zTree实现单独选中根节点中第一个节点示例
Mar 08 Javascript
JavaScript实现无穷滚动加载数据
May 06 Javascript
vue自定义全局组件(自定义插件)的用法
Jan 30 Javascript
vue-cli 如何打包上线的方法示例
May 08 Javascript
Vue实现页面添加水印功能
Nov 09 Javascript
vue-cli3配置favicon.ico和title的流程
Oct 27 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学习笔记 数组遍历实现代码
2011/06/09 PHP
php file_get_contents抓取Gzip网页乱码的三种解决方法
2013/11/12 PHP
php下pdo的mysql事务处理用法实例
2014/12/27 PHP
PHP模板引擎smarty详细介绍
2015/05/26 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
2016/09/23 PHP
Yii2使用$this->context获取当前的Module、Controller(控制器)、Action等
2017/03/29 PHP
PHP抽象类基本用法示例
2018/12/28 PHP
javascript 子窗体父窗体相互传值方法
2010/05/31 Javascript
JavaScript中的bold()方法使用详解
2015/06/08 Javascript
轻松掌握JavaScript单例模式
2016/08/25 Javascript
浅谈js原生拖放
2016/11/21 Javascript
详解handlebars+require基本使用方法
2016/12/21 Javascript
javascript设计模式之模块模式学习笔记
2017/02/15 Javascript
详解Vue.js Mixins 混入使用
2017/09/15 Javascript
利用javascript如何随机生成一定位数的密码
2017/09/22 Javascript
mui back 返回刷新页面的实例
2017/12/06 Javascript
ES6 如何改变JS内置行为的代理与反射
2019/02/11 Javascript
4 种滚动吸顶实现方式的比较
2019/04/09 Javascript
JS前端知识点 运算符优先级,URL编码与解码,String,Math,arguments操作整理总结
2019/06/27 Javascript
vue.js 子组件无法获取父组件store值的解决方式
2019/11/08 Javascript
JS实现联想、自动补齐国家或地区名称的功能
2020/07/07 Javascript
jenkins自动构建发布vue项目的方法步骤
2021/01/04 Vue.js
[02:56]DOTA2亚洲邀请赛 VG出场战队巡礼
2015/02/07 DOTA
Python深入学习之对象的属性
2014/08/31 Python
Python编程中对文件和存储器的读写示例
2016/01/25 Python
Python中列表、字典、元组数据结构的简单学习笔记
2016/03/20 Python
Python构造自定义方法来美化字典结构输出的示例
2016/06/16 Python
python查询mysql,返回json的实例
2018/03/26 Python
python 实现二维列表转置
2019/12/02 Python
PyTorch的torch.cat用法
2020/06/28 Python
国际书籍零售商:Wordery
2017/11/01 全球购物
台湾母婴用品购物网站:Infant婴之房
2018/06/15 全球购物
澳大利亚体育和露营装备在线/实体零售商:Find Sports
2020/06/03 全球购物
美国在线购买空气净化器、除湿器、加湿器网站:AllergyBuyersClub
2021/03/16 全球购物
辩论会主持词
2015/07/03 职场文书
详解Java ES多节点任务的高效分发与收集实现
2021/06/30 Java/Android