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 相关文章推荐
My Desktop :) 桌面式代码
Dec 29 Javascript
jQuery 源代码显示控件 (Ajax加载方式).
May 18 Javascript
javascript 动态加载 css 方法总结
Jul 11 Javascript
基于jquery的使ListNav兼容中文首字拼音排序的实现代码
Jul 10 Javascript
jQuery实现列表自动滚动循环滚动展示新闻
Aug 22 Javascript
浅谈javascript运算符——条件,逗号,赋值,()和void运算符
Jul 15 Javascript
zTree jQuery 树插件的使用(实例讲解)
Sep 25 jQuery
js点击时关闭该范围下拉菜单之外的菜单方法
Jan 11 Javascript
微信小程序scroll-view组件实现滚动动画
Jan 31 Javascript
vue 表单验证按钮事件交由父组件触发的方法
Dec 17 Javascript
Vue全局loading及错误提示的思路与实现
Aug 09 Javascript
countUp.js实现数字动态变化效果
Oct 17 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正则去除网页中所有的html,js,css,注释的实现方法
2016/11/03 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
PHP并发场景的三种解决方案代码实例
2021/02/27 PHP
prototype1.4中文手册
2006/09/22 Javascript
js右键菜单效果代码
2007/07/21 Javascript
jQueryUI的Dialog的简单封装
2010/06/07 Javascript
MooTools 页面滚动浮动层智能定位实现代码
2011/08/23 Javascript
jQuery.Validate验证库的使用介绍
2013/04/26 Javascript
JavaScript代码应该放在HTML代码哪个位置比较好?
2014/10/16 Javascript
javascript中createElement的两种创建方式
2015/05/14 Javascript
AngularJS Module方法详解
2015/12/08 Javascript
正则表达式,替换所有HTML标签的简单实例
2016/11/28 Javascript
jQuery源码分析之init的详细介绍
2017/02/13 Javascript
AngularJS使用ng-class动态增减class样式的方法示例
2017/05/18 Javascript
详解wow.js中各种特效对应的类名
2017/09/13 Javascript
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
2017/10/24 Javascript
浅析node应用的timing-attack安全漏洞
2018/02/28 Javascript
HTML+JS实现“代码雨”效果源码(黑客帝国文字下落效果)
2020/03/17 Javascript
JS实现电脑虚拟键盘的操作
2020/06/24 Javascript
用Python编写一个基于终端的实现翻译的脚本
2015/04/24 Python
python批量添加zabbix Screens的两个脚本分享
2017/01/16 Python
python爬取亚马逊书籍信息代码分享
2017/12/09 Python
python MySQLdb使用教程详解
2018/03/20 Python
浅谈Python爬虫基本套路
2019/03/25 Python
Python安装Flask环境及简单应用示例
2019/05/03 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
2019/06/04 Python
python的pytest框架之命令行参数详解(上)
2019/06/27 Python
nginx+uwsgi+django环境搭建的方法步骤
2019/11/25 Python
django使用F方法更新一个对象多个对象字段的实现
2020/03/28 Python
Selenium基于PIL实现拼接滚动截图
2020/04/10 Python
基于Python的图像阈值化分割(迭代法)
2020/11/20 Python
JAKO-O德国野酷台湾站:德国首屈一指的婴幼童用品品牌
2019/01/14 全球购物
中国汽车租赁行业头部企业:一嗨租车
2019/05/16 全球购物
春节晚会主持词
2014/03/24 职场文书
计划生育宣传标语
2014/06/21 职场文书
美术教师求职信范文
2015/03/20 职场文书