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 相关文章推荐
javascript 动态table添加colspan\rowspan 参数的方法
Jul 25 Javascript
form表单中去掉默认的enter键提交并绑定js方法实现代码
Apr 01 Javascript
ie下$.getJSON出现问题的解决方法
Feb 12 Javascript
jquery解析JSON数据示例代码
Mar 17 Javascript
javascript实现获取浏览器版本、操作系统类型
Jan 29 Javascript
javascript常用方法总结
May 14 Javascript
浅谈Javascript中的12种DOM节点类型
Aug 19 Javascript
微信小程序之picker日期和时间选择器
Feb 09 Javascript
详解Chart.js轻量级图表库的使用经验
May 22 Javascript
JavaScript基于数组实现的栈与队列操作示例
Dec 22 Javascript
js实现视图和数据双向绑定的方法分析
Feb 05 Javascript
vue组件添加事件@click.native操作
Oct 30 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
《被神捡到的男人》动画化计划进行中!
2020/03/06 日漫
php中如何使对象可以像数组一样进行foreach循环
2013/08/09 PHP
完美解决thinkphp唯一索引重复时出错的问题
2017/03/31 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
2017/08/11 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
2018/07/17 PHP
PHP时间相关常用函数用法示例
2020/06/03 PHP
JavaScript Event学习第十章 一些可替换的事件对
2010/02/10 Javascript
JS中引用百度地图并将百度地图的logo和信息去掉
2013/09/29 Javascript
JavaScript控制按钮可用或不可用的方法
2015/04/03 Javascript
简单谈谈node.js 版本控制 nvm和 n
2015/10/15 Javascript
JavaScript中的splice方法用法详解
2016/07/20 Javascript
使用ajaxfileupload.js实现上传文件功能
2016/08/13 Javascript
JS动态的把左边列表添加到右边的实现代码(可上下移动)
2016/11/17 Javascript
Angular2库初探
2017/03/01 Javascript
Vue.js实战之Vuex的入门教程
2017/04/01 Javascript
详解在vue-cli中使用路由
2017/09/25 Javascript
微信小程序实现图片上传、删除和预览功能的方法
2017/12/18 Javascript
详解angular2如何手动点击特定元素上的点击事件
2018/10/16 Javascript
vuex实现数据状态持久化
2019/11/11 Javascript
使用Python实现下载网易云音乐的高清MV
2015/03/16 Python
菜鸟使用python实现正则检测密码合法性
2016/01/05 Python
python递归删除指定目录及其所有内容的方法
2017/01/13 Python
Python中装饰器兼容加括号和不加括号的写法详解
2017/07/05 Python
python探索之BaseHTTPServer-实现Web服务器介绍
2017/10/28 Python
Python cookbook(数据结构与算法)实现优先级队列的方法示例
2018/02/18 Python
利用python实现短信和电话提醒功能的例子
2019/08/08 Python
Python数据库小程序源代码
2019/09/15 Python
HTML5中div、article、section的区别及使用介绍
2013/08/14 HTML / CSS
运行时异常与一般异常有何异同?
2014/01/05 面试题
实现中国梦思想汇报2014
2014/09/13 职场文书
有限责任公司股东合作协议书
2014/12/02 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书
简单介绍 http请求响应参数、无连接无状态、MIME、状态码、端口、telnet、curl
2021/03/31 HTML / CSS
前端JS获取URL参数的4种方法总结
2022/04/05 Javascript
利用Redis实现点赞功能的示例代码
2022/06/28 Redis