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 13 Javascript
DOMAssitant最新版 DOMAssistant 2.5发布
Dec 25 Javascript
图片上传即时显示缩略图的js代码
May 27 Javascript
Webkit的跨域安全问题说明
Sep 13 Javascript
Ext JS 4官方文档之三 -- 类体系概述与实践
Dec 16 Javascript
jquery的父子兄弟节点查找示例代码
Mar 03 Javascript
基于jQuery日历插件制作日历
Mar 11 Javascript
详解微信JS-SDK选择图片遇到的坑
Aug 15 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
Nov 25 Javascript
详解Next.js页面渲染的优化方案
Jan 27 Javascript
vue实现公共方法抽离
Jul 31 Javascript
js 将多个对象合并成一个对象 assign方法的实现
Sep 24 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生成静态文件的多种方法分享
2012/07/17 PHP
php中长文章分页显示实现代码
2012/09/29 PHP
PHP和JavaScrip分别获取关联数组的键值示例代码
2013/09/16 PHP
php.ini save_handler 修改不生效的解决办法
2014/07/22 PHP
学习php设计模式 php实现适配器模式
2015/12/07 PHP
PHPStorm+XDebug进行调试图文教程
2016/06/13 PHP
中高级PHP程序员应该掌握哪些技术?
2016/09/23 PHP
二级域名转向类
2006/11/09 Javascript
关于锚点跳转及jQuery下相关操作与插件
2012/10/01 Javascript
js 取时间差去掉周六周日实现代码
2012/12/25 Javascript
javascript验证身份证完全方法具体实现
2013/11/18 Javascript
文字垂直滚动之javascript代码
2015/07/29 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
2015/09/04 Javascript
使用do...while的方法输入一个月中所有的周日(实例代码)
2016/07/22 Javascript
Vue中组件之间数据的传递的示例代码
2017/09/08 Javascript
基于node打包可执行文件工具_Pkg使用心得分享
2018/01/24 Javascript
nodejs分离html文件里面的js和css的方法
2019/04/09 NodeJs
vue输入节流,避免实时请求接口的实例代码
2019/10/30 Javascript
Python 将RGB图像转换为Pytho灰度图像的实例
2017/11/14 Python
python安装twisted的问题解析
2018/08/21 Python
Python判断变量名是否合法的方法示例
2019/01/28 Python
python批量将excel内容进行翻译写入功能
2019/10/10 Python
opencv-python的RGB与BGR互转方式
2020/06/02 Python
运动服饰每月订阅盒:Ellie
2018/04/29 全球购物
美国专业汽车音响和移动电子产品零售商:Car Toys
2019/05/13 全球购物
美国家居装饰网上商店:Lulu & Georgia
2019/09/14 全球购物
SOKOLOV官网:俄罗斯珠宝首饰品牌
2021/01/02 全球购物
机械专业应届生求职信
2013/09/21 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书
高中美术教师事迹材料
2014/08/22 职场文书
学生会竞选演讲稿怎么写
2014/08/26 职场文书
党员教师个人对照检查材料(群众路线)
2014/09/26 职场文书
2014年设备管理工作总结
2014/11/26 职场文书
Python中OpenCV实现简单车牌字符切割
2021/06/11 Python
SQL Server2019数据库备份与还原脚本,数据库可批量备份
2021/11/20 SQL Server
java协程框架quasar和kotlin中的协程对比分析
2022/02/24 Java/Android