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 三级关联菜单效果实例
Aug 13 Javascript
Js得到radiobuttonlist选中值的两种方法(推荐)
Aug 25 Javascript
关于Node.js中Buffer的一些你可能不知道的用法
Mar 28 Javascript
关于vue-router路径计算问题
May 10 Javascript
Angularjs为ng-click事件传递参数
Jun 15 Javascript
认识less和webstrom的less配置方法
Aug 02 Javascript
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
Aug 22 Javascript
css和js实现弹出登录居中界面完整代码
Nov 26 Javascript
Phaser.js实现简单的跑酷游戏附源码下载
Oct 26 Javascript
详解ES7 Decorator 入门解析
Feb 18 Javascript
JavaScript生成一个不重复的ID的方法示例
Sep 16 Javascript
Vue vm.$attrs使用场景详解
Mar 08 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 注册时输入信息验证器的实现详解
2013/07/05 PHP
我也种棵OO树JXTree[js+css+xml]
2007/04/02 Javascript
淘宝搜索框效果实现分析
2011/03/05 Javascript
Jquery阻止事件冒泡 event.stopPropagation
2011/12/11 Javascript
关于eval 与new Function 到底该选哪个?
2013/04/17 Javascript
简单的js表单验证函数
2013/10/28 Javascript
js实现同一页面可多次调用的图片幻灯切换效果
2015/02/28 Javascript
JavaScript类继承及实例化的方法
2015/07/25 Javascript
JS实现的手机端精简幻灯片效果
2016/09/05 Javascript
整理关于Bootstrap模态弹出框的慕课笔记
2017/03/29 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
2017/09/12 jQuery
详解vue + vuex + directives实现权限按钮的思路
2017/10/24 Javascript
初识 Vue.js 中的 *.Vue文件
2017/11/22 Javascript
select标签设置默认选中的选项方法
2018/03/02 Javascript
web3.js增加eth.getRawTransactionByHash(txhash)方法步骤
2018/03/15 Javascript
vuejs 动态添加input框的实例讲解
2018/08/24 Javascript
Vue 后台管理类项目兼容IE9+的方法示例
2019/02/20 Javascript
JS中准确判断变量类型的方法
2020/06/01 Javascript
python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
2014/07/18 Python
python网络编程之读取网站根目录实例
2014/09/30 Python
总结python爬虫抓站的实用技巧
2016/08/09 Python
Python 读取串口数据,动态绘图的示例
2019/07/02 Python
Python如何读写CSV文件
2020/08/13 Python
Python爬虫破解登陆哔哩哔哩的方法
2020/11/17 Python
关于Python错误重试方法总结
2021/01/03 Python
接口可以包含哪些成员
2012/09/30 面试题
教师评优的个人自我评价分享
2013/09/19 职场文书
客户代表自我评价范例
2013/09/24 职场文书
农药学硕士毕业生自荐信
2013/09/25 职场文书
市场策划求职信
2014/08/07 职场文书
银行授权委托书格式
2014/10/10 职场文书
会计求职简历自我评价
2015/03/10 职场文书
关于环保的宣传稿
2015/07/23 职场文书
干部考核工作总结2015
2015/07/24 职场文书
mysql数据库入门第一步之创建表
2021/05/14 MySQL
如何利用python实现列表嵌套字典取值
2022/06/10 Python