ES6中的rest参数与扩展运算符详解
发布时间 - 2026-01-11 02:23:49 点击率:次前言

本文主要给大家介绍了关于ES6中rest参数与扩展运算符的相关内容,rest参数和扩展运算符都是ES6新增的特性。rest参数的形式为:...变量名;扩展运算符是三个点(...)。下面话不多说了,来一起看看详细的介绍:
rest参数
rest参数用于获取函数的多余参数,这样就不需要使用arguments对象了。rest参数搭配的变量是一个数组,该变量将多余的参数放入数组中。
function add(...values) {
let sum = 0;
for (var val of values) {
sum += val;
}
return sum;
}
add(1, 2, 3) // 6
传递给 add 函数的一组参数值,被整合成了数组 values。
下面是一个 rest 参数代替arguments变量的例子。
// arguments变量的写法
function sortNumbers() {
return Array.prototype.slice.call(arguments).sort();
}
// rest参数的写法
const sortNumbers = (...numbers) => numbers.sort();
rest参数和arguments对象的区别
- rest参数只包含那些没有对应形参的实参;而 arguments 对象包含了传给函数的所有实参。
- arguments 对象不是一个真实的数组;而rest参数是真实的 Array 实例,也就是说你能够在它上面直接使用所有的数组方法。
- arguments 对象对象还有一些附加的属性 (比如callee属性)。
另外,使用rest参数时应注意一下两点:
1、rest 参数之后不能再有其他参数(即只能是最后一个参数),否则会报错。
function f(a, ...b, c) { ... } // 报错
2、函数的length属性,不包括 rest 参数。
(function(a) {}).length // 1
(function(...a) {}).length // 0
(function(a, ...b) {}).length // 1
扩展运算符
扩展运算符可以看做是 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。
console.log(...[1, 2, 3]) // 1 2 3 console.log(1, ...[2, 3, 4], 5) //1 2 3 4 5
扩展运算符的应用
普通的函数调用
function push(array, ...items) {
array.push(...items);
}
function add(x, y) {
return x + y;
}
var numbers = [4, 38];
add(...numbers) // 42
上面代码中,array.push(...items)和add(...numbers)这两行,都是函数的调用,它们的都使用了扩展运算符。该运算符将一个数组,变为参数序列。
替代 apply 方法调用函数
// ES5 的写法 Math.max.apply(null, [14, 3, 77]) // ES6 的写法 Math.max(...[14, 3, 77]) // 等同于 Math.max(14, 3, 77);
// ES5 的写法 var arr1 = [0, 1, 2]; var arr2 = [3, 4, 5]; Array.prototype.push.apply(arr1, arr2); // ES6 的写法 var arr1 = [0, 1, 2]; var arr2 = [3, 4, 5]; arr1.push(...arr2);
合并数组
var arr1 = ['a', 'b']; var arr2 = ['c']; var arr3 = ['d', 'e']; // ES5的合并数组 arr1.concat(arr2, arr3) // [ 'a', 'b', 'c', 'd', 'e' ] // ES6的合并数组 [...arr1, ...arr2, ...arr3] // [ 'a', 'b', 'c', 'd', 'e' ]
与解构赋值结合
const [first, ...rest] = [1, 2, 3, 4, 5]; first // 1 rest // [2, 3, 4, 5] const [first, ...rest] = []; first // undefined rest // [] const [first, ...rest] = ["foo"]; first // "foo" rest // []
如果将扩展运算符用于数组赋值,只能放在参数的最后一位,否则会报错。
const [...butLast, last] = [1, 2, 3, 4, 5]; // 报错 const [first, ...middle, last] = [1, 2, 3, 4, 5]; // 报错
将字符串转为数组
var str = 'hello';
// ES5
var arr1 = str.split(''); // [ "h", "e", "l", "l", "o" ]
// ES6
var arr2 = [...str]; // [ "h", "e", "l", "l", "o" ]
实现了 Iterator 接口的对象
任何 Iterator 接口的对象,都可以用扩展运算符转为真正的数组。
var nodeList = document.querySelectorAll('div');
var array = [...nodeList];
上面代码中,querySelectorAll方法返回的是一个nodeList对象。它不是数组,而是一个类似数组的对象。这时,扩展运算符可以将其转为真正的数组,原因就在于NodeList对象实现了 Iterator 。
总结
从上面的例子可以看出,rest参数使用场景应该稍少一些,主要是处理不定数量参数,可以避免arguments对象的使用。而扩展运算符的应用就比较广了,在实际项目中灵活应用,能写出更精简的代码。
好了,以上就是这篇文章的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# rest参数与扩展运算符
# es6扩展运算符
# es6
# rest参数
# es6函数之rest参数用法实例分析
# es6中的解构赋值、扩展运算符和rest参数使用详解
# ES6的函数rest参数使用小结
# 运算符
# 报错
# 都是
# 是一个
# 则会
# 的是
# 实现了
# 成了
# 好了
# 放在
# 相关内容
# 就不
# 说了
# 可以用
# 不多
# 将其
# 给大家
# 说你
# 可以看出
# 这篇文章
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么解决跨域问题_Laravel配置CORS跨域访问
Python文件流缓冲机制_IO性能解析【教程】
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
太平洋网站制作公司,网络用语太平洋是什么意思?
米侠浏览器网页背景异常怎么办 米侠显示修复
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
音乐网站服务器如何优化API响应速度?
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
打造顶配客厅影院,这份100寸电视推荐名单请查收
Laravel PHP版本要求一览_Laravel各版本环境要求对照
HTML 中动态设置元素 name 属性的正确语法详解
Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南
高防服务器租用指南:配置选择与快速部署攻略
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
网站页面设计需要考虑到这些问题
Python函数文档自动校验_规范解析【教程】
🚀拖拽式CMS建站能否实现高效与个性化并存?
Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】
Firefox Developer Edition开发者版本入口
,怎么在广州志愿者网站注册?
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
非常酷的网站设计制作软件,酷培ai教育官方网站?
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
如何在橙子建站上传落地页?操作指南详解
大连 网站制作,大连天途有线官网?
如何撰写建站申请书?关键要点有哪些?
佛山网站制作系统,佛山企业变更地址网上办理步骤?
Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧
Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例
如何快速搭建高效WAP手机网站吸引移动用户?
Laravel如何实现本地化和多语言支持?(i18n教程)
jQuery validate插件功能与用法详解
BootStrap整体框架之基础布局组件
javascript读取文本节点方法小结
悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】
如何用搬瓦工VPS快速搭建个人网站?
jQuery中的100个技巧汇总
高性价比服务器租赁——企业级配置与24小时运维服务
Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
网站建设整体流程解析,建站其实很容易!

