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 相关文章推荐
解决IE6的PNG透明JS插件使用介绍
Apr 17 Javascript
如何解决Jquery库及其他库之间的$命名冲突
Sep 15 Javascript
JavaScript Math.ceil() 函数使用介绍
Dec 11 Javascript
jquery插件star-rating.js实现星级评分特效
Apr 15 Javascript
基于jQuery下拉选择框插件支持单选多选功能代码
Jun 07 Javascript
jQuery处理XML文件的几种方法
Jun 14 Javascript
JS自定义滚动条效果简单实现代码
Oct 27 Javascript
20170918 前端开发周报之JS前端开发必看
Sep 18 Javascript
浅谈Vue项目骨架屏注入实践
Aug 05 Javascript
js实现简单掷骰子小游戏
Oct 24 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
Dec 01 Javascript
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
Feb 20 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
如何使用脚本模仿登陆过程
2006/11/22 PHP
深入extjs与php参数交互的详解
2013/06/25 PHP
destoon实现首页显示供应、企业、资讯条数的方法
2014/07/15 PHP
PHP利用APC模块实现大文件上传进度条的方法
2015/10/29 PHP
微信支付PHP SDK ―― 公众号支付代码详解
2016/09/13 PHP
php获取给定日期相差天数的方法分析
2017/02/20 PHP
Yii 框架使用数据库(databases)的方法示例
2020/05/19 PHP
不用ajax实现点击文字即可编辑的方法
2007/12/16 Javascript
JSON扫盲帖 JSON.as类教程
2009/02/16 Javascript
firefox firebug中文入门教程 脚本之家新年特别版
2010/01/02 Javascript
jquery不会自动回收xmlHttpRequest对象 导致了内存溢出
2012/06/18 Javascript
javascript中的=等号个数问题两个跟三个有什么区别
2013/10/23 Javascript
jquery实现checkbox全选全不选的简单实例
2013/12/31 Javascript
jQuery事件之键盘事件(ctrl+Enter回车键提交表单等)
2014/05/11 Javascript
js获取时间精确到秒(年月日)
2016/03/16 Javascript
AJAX实现瀑布流触发分页与分页触发瀑布流的方法
2016/05/23 Javascript
Bootstrap图片轮播组件使用实例解析
2016/06/30 Javascript
EasyUI的TreeGrid的过滤功能的解决思路
2017/08/08 Javascript
深入理解Node.js中通用基础设计模式
2017/09/19 Javascript
node使用promise替代回调函数
2018/05/07 Javascript
vue动态设置img的src路径实例
2018/09/18 Javascript
Layui 数据表格批量删除和多条件搜索的实例
2019/09/04 Javascript
vue进入页面时不在顶部,检测滚动返回顶部按钮问题及解决方法
2019/10/30 Javascript
VUE.CLI4.0配置多页面入口的实现
2019/11/25 Javascript
Vue——前端生成二维码的示例
2020/12/19 Vue.js
使用python来调用CAN通讯的DLL实现方法
2019/07/03 Python
python获取整个网页源码的方法
2020/08/03 Python
CSS3标注引用的出处和来源的方法
2020/02/25 HTML / CSS
印度在线购物网站:Paytmmall
2019/07/24 全球购物
三个Unix的命令面试题
2015/04/12 面试题
计算机求职自荐信范文
2014/04/19 职场文书
市场推广策划方案
2014/06/02 职场文书
党的群众路线教育实践活动个人对照检查材料(医生)
2014/11/05 职场文书
PHP使用QR Code生成二维码实例
2021/07/07 PHP
Redis超详细讲解高可用主从复制基础与哨兵模式方案
2022/04/07 Redis
linux目录管理方法介绍
2022/06/01 Servers