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 相关文章推荐
Javascript 读书笔记索引贴
Jan 11 Javascript
jQuery的事件委托实例分析
Jul 15 Javascript
详解JavaScript的回调函数
Nov 20 Javascript
JS中改变this指向的方法(call和apply、bind)
Mar 26 Javascript
浅谈Javascript中的12种DOM节点类型
Aug 19 Javascript
使用jquery实现的循环连续可停顿滚动实例
Nov 23 Javascript
vue cli 3.0 使用全过程解析
Jun 14 Javascript
解决vue接口数据赋值给data没有反应的问题
Aug 27 Javascript
在vue项目中,将juery设置为全局变量的方法
Sep 25 Javascript
微信小程序登录数据解密及状态维持实例详解
May 06 Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
May 07 Javascript
给原生html中添加水印遮罩层的实现示例
Apr 02 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
JAVA/JSP学习系列之四
2006/10/09 PHP
php xml文件操作代码(一)
2009/03/20 PHP
深入PHP empty(),isset(),is_null()的实例测试详解
2013/06/06 PHP
PHP判断数据库中的记录是否存在的方法
2014/11/14 PHP
PHP获取文件夹大小函数用法实例
2015/07/01 PHP
php使用Swoole实现毫秒级定时任务的方法
2020/09/04 PHP
jquery异步循环获取功能实现代码
2010/09/19 Javascript
简单实用的js调试logger组件实现代码
2010/11/20 Javascript
jQuery 过滤not()与filter()实例代码
2012/05/10 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
jquery获得option的值和对option进行操作
2013/12/13 Javascript
js全选实现和判断是否有复选框选中的方法
2015/02/17 Javascript
JS使用ajax从xml文件动态获取数据显示的方法
2015/03/24 Javascript
在JavaScript中处理时间之getHours()方法的使用
2015/06/10 Javascript
js跨域请求的5中解决方式
2015/07/02 Javascript
浏览器中url存储的JavaScript实现
2015/07/07 Javascript
使用HTML+CSS+JS制作简单的网页菜单界面
2015/07/27 Javascript
JavaScript中实现无缝滚动、分享到侧边栏实例代码
2016/04/06 Javascript
原生js实现新闻列表展开/收起全文功能
2017/01/20 Javascript
Ajax和Comet技术总结
2017/02/19 Javascript
JS图片预加载插件详解
2017/06/21 Javascript
实现单层json按照key字母顺序排序的示例
2017/12/06 Javascript
vue router导航守卫(router.beforeEach())的使用详解
2019/04/19 Javascript
vue实现表格过滤功能
2019/09/27 Javascript
Javascript中的奇葩知识,你知道吗?
2021/01/25 Javascript
使用python的pexpect模块,实现远程免密登录的示例
2019/02/14 Python
Python下opencv图像阈值处理的使用笔记
2019/08/04 Python
Python实现搜索算法的实例代码
2020/01/02 Python
python 串行执行和并行执行实例
2020/04/30 Python
pycharm 实现本地写代码,服务器运行的操作
2020/06/08 Python
戴尔新加坡官网:Dell Singapore
2020/12/13 全球购物
简述安装Slackware Linux系统的过程
2012/01/12 面试题
餐饮加盟计划书
2014/01/10 职场文书
祖国在我心中的演讲稿
2014/05/04 职场文书
雨中的树观后感
2015/06/03 职场文书
2016形势与政策学习心得体会
2016/01/12 职场文书