ES6扩展运算符和rest运算符用法实例分析


Posted in Javascript onMay 23, 2020

本文实例讲述了ES6扩展运算符和rest运算符用法。分享给大家供大家参考,具体如下:

运算符可以很好的为我们解决参数和对象数组未知情况下的编程,让我们的代码更健壮和简洁。

运算符有两种:对象扩展运算符与rest运算符。

ES6扩展运算符和rest运算符用法实例分析

1.对象扩展( spread)运算符(...)

(1)解决参数个数问题

以前我们编程是传递的参数一般是确定,否则将会报错或者异常,如下:

function test(a,b,c,d) {
 console.log(a)
 console.log(b)
 console.log(c)
 console.log(d)
 console.log(e)//e is not defined
}
test(1,2,3,4)

参数固定,多余的参数会出错。

但我们又想传递多个参数,但是不确定参数的个数,这时候可以使用对象扩展运算符来作参数。

function test1(...arg) {
 console.log(arg[0]);//1
 console.log(arg[1]);//2
 console.log(arg[2]);//3
 console.log(arg[3])//4
 console.log(arg[4])//5
 console.log(arg[5])//undefined
}
test1(1,2,3,4,5)

这时候程序是不会报错的,多余取值返回的结果是undefined。这说明是可以传入多个值,并且就算方法中引用多了也不会报错。

(2)解决数组赋值问题

我们先用一个例子说明,我们声明两个数组arr1和arr2,然后我们把arr1赋值给arr2,然后我们改变arr2的值,你会发现arr1的值也改变了,因为我们这是对内存堆栈的引用,而不是真正的赋值。

let arr1=['i','love','you'];
let arr2=arr1;
console.log("arr2====",arr2);
arr2.push('too');
console.log("arr1====>",arr1);

控制台输出的结果为:

["i", "love", "you"]

["i", "love", "you", "too"]

这是我们不想看到的,可以利用对象扩展运算符简单的解决这个问题,现在我们对代码进行改造。

let arr1=['i','love','you'];
let arr2=[...arr1];
console.log(arr2);
arr2.push('too');
console.log(arr1);

最终可以看到我们的arr1并没有改变,简单的扩展运算符就解决了这个问题。

2.rest运算符

(1)含义

rest参数作用: 将多余的逗号分隔的参数序列转换为数组参数

注意: rest参数必须是最后一个参数,否则报错。

rest运算符与对象扩展运算符有很多类似之处,它也用…(三个点)来表示,比如:

function test(first,...arg){
 console.log("first==>",first)//0
 console.log("arg=====>",arg)
}
test(0,1,2,3,4,5,6,7);

输出结果为:

first==> 0
arg=====>[1, 2, 3, 4, 5, 6, 7]

(2)如何循环输出rest运算符

用for…of循环来进行打印出arg的值

function test(first,...arg){
 for(let val of arg){
  console.log(val)
 }
}
test(0,1,2,3,4,5,6,7);

结果为:

1,2,3,4,5,6,7

最后总结:

  • 扩展运算符用三个点号表示,功能是把数组或类数组对象展开成一系列用逗号隔开的值
  • rest运算符也是三个点号,不过其功能与扩展运算符恰好相反,把逗号隔开的值序列组合成一个数组
  • 当三个点(...)在等号左边,或者放在形参上。为 rest 运算符
  • 当三个在等号右边,或者放在实参上,是 spread运算符

或者说:放在被赋值一方是rest 运算符。放在赋值一方式 spread运算符。

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JS遮罩层效果 兼容ie firefox jQuery遮罩层
Jul 26 Javascript
JavaScript具有类似Lambda表达式编程能力的代码(改进版)
Sep 14 Javascript
MooTools 页面滚动浮动层智能定位实现代码
Aug 23 Javascript
JS解析json数据并将json字符串转化为数组的实现方法
Dec 25 Javascript
改变文件域的样式实现思路同时兼容ie、firefox
Oct 23 Javascript
js鼠标及对象坐标控制属性详细解析
Dec 14 Javascript
JS中getYear()和getFullYear()区别分析
Jul 04 Javascript
如何用JavaScript实现动态修改CSS样式表
May 20 Javascript
在vue.js中抽出公共代码的方法示例
Jun 08 Javascript
AngularJS中filter的使用实例详解
Aug 25 Javascript
微信内置浏览器图片查看器的代码实例
Oct 08 Javascript
JavaScript定时器使用方法详解
Mar 26 Javascript
JavaScript组合设计模式--改进引入案例分析
May 23 #Javascript
JavaScript组合模式---引入案例分析
May 23 #Javascript
JavaScript设计模式--桥梁模式引入操作实例分析
May 23 #Javascript
JavaScript设计模式--简单工厂模式实例分析【XHR工厂案例】
May 23 #Javascript
JavaScript设计模式--简单工厂模式定义与应用案例详解
May 23 #Javascript
基于element-ui封装可搜索的懒加载tree组件的实现
May 22 #Javascript
微信小程序点击滚动到指定位置的实现
May 22 #Javascript
You might like
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装最快的解决办法
2010/08/01 PHP
Pain 全世界最小最简单的PHP模板引擎 (普通版)
2011/10/23 PHP
使用composer 安装 laravel框架的方法图文详解
2019/08/02 PHP
JQuery Study Notes 学习笔记(一)
2010/08/04 Javascript
jquery图片放大功能简单实现
2013/08/01 Javascript
js获取或设置当前窗口url参数的小例子
2013/10/14 Javascript
上传文件返回的json数据会被提示下载问题解决方案
2014/12/03 Javascript
jQuery中事件与动画的总结分享
2016/05/24 Javascript
javascript之Boolean类型对象
2016/06/07 Javascript
理解JavaScript原型链
2016/10/25 Javascript
使用Ajax生成的Excel文件并下载的实例
2016/11/21 Javascript
详谈Angular路由与Nodejs路由的区别
2017/03/05 NodeJs
Vue实现路由跳转和嵌套
2017/06/20 Javascript
基于Bootstrap分页的实例讲解(必看篇)
2017/07/04 Javascript
微信小程序开发之tabbar图标和颜色的实现
2018/10/17 Javascript
一文快速了解JQuery中的AJAX
2019/05/31 jQuery
JavaScript 事件代理需要注意的地方
2020/09/08 Javascript
[02:49]2018DOTA2亚洲邀请赛主赛事决赛日战况回顾 Mineski鏖战5局夺得辉耀
2018/04/10 DOTA
Python3网络爬虫之使用User Agent和代理IP隐藏身份
2017/11/23 Python
python+matplotlib绘制简单的海豚(顶点和节点的操作)
2018/01/02 Python
python3.X 抓取火车票信息【修正版】
2018/06/19 Python
Python 实现子类获取父类的类成员方法
2019/01/11 Python
Python拆分大型CSV文件代码实例
2019/10/07 Python
python实现自动化报表功能(Oracle/plsql/Excel/多线程)
2019/12/02 Python
详解python tkinter模块安装过程
2020/01/06 Python
学python爬虫能做什么
2020/07/29 Python
详解Html5中video标签那些属性和方法
2019/07/01 HTML / CSS
HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码
2020/04/10 HTML / CSS
Java的基础面试题附答案
2016/01/10 面试题
详细的大学生创业计划书模板
2014/01/27 职场文书
收银员岗位职责
2014/02/07 职场文书
护士上岗前培训自我鉴定
2014/04/20 职场文书
电焊工岗位工作职责
2014/07/09 职场文书
小学学校门卫岗位职责
2014/08/03 职场文书
红领巾广播站广播稿(3篇)
2014/09/20 职场文书
《我在为谁工作》:工作的质量往往决定生活的质量
2019/12/27 职场文书