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 01 Javascript
ie支持function.bind()方法实现代码
Dec 27 Javascript
如何使用jquery控制CSS样式,并且取消Css样式(如背景色,有实例)
Jul 09 Javascript
JSON中双引号的轮回使用过程中一定要小心
Mar 05 Javascript
JavaScript原生对象之Date对象的属性和方法详解
Mar 13 Javascript
jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
Feb 25 Javascript
jquery trigger函数执行两次的解决方法
Feb 29 Javascript
js实现随机数字字母验证码
Jun 19 Javascript
Angular 2.0+ 的数据绑定的实现示例
Aug 09 Javascript
原生js实现简单的焦点图效果实例
Dec 14 Javascript
详解单页面路由工程使用微信分享及二次分享解决方案
Feb 22 Javascript
js实现拖拽与碰撞检测
Sep 18 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极大的增强功能和性能
2006/10/09 PHP
php的access操作类
2008/04/09 PHP
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
2015/10/21 PHP
JavaScript 轻松搞定快捷留言功能 只需一行代码
2010/04/01 Javascript
基于jQuery实现的Ajax 验证用户名是否存在的实现代码
2011/04/06 Javascript
js实现图片放大缩小功能后进行复杂排序的方法
2012/11/08 Javascript
jquery中的ajax方法怎样通过JSONP进行远程调用
2014/05/04 Javascript
JavaScript sub方法入门实例(把字符串显示为下标)
2014/10/17 Javascript
javascript实现简单的鼠标拖动效果实例
2015/04/10 Javascript
jQuery使用contains过滤器实现精确匹配方法详解
2016/02/25 Javascript
JavaScript数值千分位格式化的两种简单实现方法
2016/08/01 Javascript
微信小程序  Mustache语法详细介绍
2016/10/27 Javascript
AngularJs基于角色的前端访问控制的实现
2016/11/07 Javascript
vue计算属性时v-for处理数组时遇到的一个bug问题
2018/01/21 Javascript
vue 标签属性数据绑定和拼接的实现方法
2018/05/17 Javascript
详解关于Vue版本不匹配问题(Vue packages version mismatch)
2018/09/17 Javascript
Vue实现简易翻页效果源码分享
2018/11/08 Javascript
如何用原生js写一个弹窗消息提醒插件
2019/05/24 Javascript
node.js express捕获全局异常的三种方法实例分析
2019/12/27 Javascript
vue中实现图片压缩 file文件的方法
2020/05/28 Javascript
[13:55]Newbee vs Team Spirit
2018/06/07 DOTA
python实现定时提取实时日志程序
2018/06/22 Python
python ddt数据驱动最简实例代码
2019/02/22 Python
python 模拟贷款卡号生成规则过程解析
2019/08/30 Python
pycharm软件实现设置自动保存操作
2020/06/08 Python
皮姆斯勒语言学习:Pimsleur Language Programs
2018/06/30 全球购物
俄罗斯电动工具和设备购物网站:Vseinstrumenti.ru
2020/11/12 全球购物
怎么样写好简历中的自我评价
2013/10/25 职场文书
银行会计业务的个人自我评价
2013/11/02 职场文书
优秀电子工程系毕业生求职信
2014/05/24 职场文书
建设工地安全标语
2014/06/07 职场文书
2015年实习单位评语
2015/03/25 职场文书
歌剧魅影观后感
2015/06/05 职场文书
一篇文章搞懂python混乱的切换操作与优雅的推导式
2021/08/23 Python
vue配置型表格基于el-table拓展之table-plus组件
2022/04/12 Vue.js
mysql sock 文件解析及作用讲解
2022/07/15 MySQL