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 数组排序函数
Aug 20 Javascript
getAsDataURL在Firefox7.0下无法预览本地图片的解决方法
Nov 15 Javascript
鼠标滑过出现预览的大图提示效果
Feb 26 Javascript
javascript操作符"!~"详解
Feb 10 Javascript
js实现的简洁网页滑动tab菜单效果代码
Aug 24 Javascript
jquery遍历标签中自定义的属性方法
Sep 17 Javascript
angular ng-repeat数组中的数组实例
Feb 18 Javascript
Vue实现动态响应数据变化
Apr 28 Javascript
微信小程序开发之自定义tabBar的实现
Sep 06 Javascript
基于layui实现高级搜索(筛选)功能
Jul 26 Javascript
vue实现简单跑马灯效果
May 25 Javascript
element-ui中dialog弹窗关闭按钮失效的解决
Sep 22 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中的内存管理问题
2011/08/31 PHP
Laravel实现自定义错误输出内容的方法
2016/10/10 PHP
php实现产品加入购物车功能(1)
2020/07/23 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
jQuery的链式调用浅析
2010/12/03 Javascript
Firefox/Chrome/Safari的中可直接使用$/$$函数进行调试
2012/02/13 Javascript
Javascript 面向对象(二)封装代码
2012/05/23 Javascript
javascript模拟map输出与去除重复项的方法
2015/02/09 Javascript
jQuery实现数秒后自动提交form的方法
2015/03/05 Javascript
基于jQuery实现选项卡效果
2017/01/04 Javascript
解决Angular.js中使用Swiper插件不能滑动的问题
2018/02/26 Javascript
Vue中父子组件通讯之todolist组件功能开发
2018/05/21 Javascript
二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)
2013/12/03 Python
Python计算程序运行时间的方法
2014/12/13 Python
实例解析Python设计模式编程之桥接模式的运用
2016/03/02 Python
利用django如何解析用户上传的excel文件
2017/07/24 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
2018/02/23 Python
TensorFlow模型保存和提取的方法
2018/03/08 Python
python 筛选数据集中列中value长度大于20的数据集方法
2018/06/14 Python
Python爬虫:url中带字典列表参数的编码转换方法
2019/08/21 Python
Python2与Python3的区别点整理
2019/12/12 Python
python列表推导和生成器表达式知识点总结
2020/01/10 Python
HTML5为输入框添加语音输入功能的实现方法
2017/02/06 HTML / CSS
ReVive利维肤美国官网:RéVive Skincare
2018/04/18 全球购物
英国简约舒适女装品牌:Great Plains
2018/07/27 全球购物
英国汽车零件购物网站:GSF Car Parts
2019/05/23 全球购物
怎样声明子类
2013/07/02 面试题
学校司机岗位职责
2013/11/14 职场文书
便利店促销方案
2014/02/20 职场文书
企业业务员岗位职责
2014/03/14 职场文书
反四风对照检查材料思想汇报
2014/09/16 职场文书
社区扶贫帮困工作总结
2015/05/20 职场文书
2015年妇委会工作总结
2015/05/22 职场文书
Python趣味挑战之教你用pygame画进度条
2021/05/31 Python
详解jQuery的核心函数和事件处理
2022/02/18 jQuery
Python语法学习之进程的创建与常用方法详解
2022/04/08 Python