剩余参数是什么_如何操作不定数量的参数【教程】
发布时间 - 2026-01-30 00:00:00 点击率:次剩余参数(Rest Parameters)是JavaScript中用于捕获函数调用时多余实参的语法机制,本质是将不定数量参数收集成真正的Array实例,必须位于形参末尾且唯一,标识符如...args,区别于arguments对象,支持数组方法且在箭头函数中可用。
剩余参数(Rest Parameters)不是“可选参数”,也不是“默认参数”,它是 JavaScript 中专门用来捕获函数调用时**多余实参**的语法机制,本质是把不定数量的参数收集成一个真正的 Array 实例。
rest 参数必须写在形参列表末尾
它用三个点 ... 加一个标识符表示,比如 ...args。这个标识符会成为包含所有剩余实参的数组变量名。如果把它放在中间或开头,语法直接报错:
function bad(a, ...rest, b) { } // SyntaxError: Rest parameter must be last formal parameter
- 只能有一个 rest 参数,且必须是最后一个形参
- 它不占用“已命名参数”的位置 ——
length属性只统计非 rest 的形参数量 - 和
arguments不同,...args是真数组,能直接调用.map()、.reduce()等方法
和 arguments 对象的关键区别
arguments 是类数组对象,没有数组方法,且在箭头函数中不可用;rest 参数补上了这些短板:
-
arguments在严格模式下无法修改 callee / caller,rest 参数无此限制 -
arguments包含所有传入参数(包括已命名的),rest 参数只包含“多出来的”那部分 - 箭头函数没有
arguments,但可以正常使用 rest 参数
例如: const sum = (...nums) => nums.reduce((a, b) => a + b, 0); —— 这比用 Array.from(a 简洁安全得多。
常见误用:混淆 rest 和展开语法
... 在函数定义里是 rest(收集),在函数调用或字面量中是展开(spread)。写错位置就会出问题:
-
Math.max(...[1, 2, 3])✅ 正确:展开数组为独立参数 -
Math.max([1, 2, 3])❌ 返回NaN:只传了一个数组参数 -
function f(...a, ...b) { }❌ 语法错误:不允许多个 rest
注意:rest 参数不会自动“过滤 undefined”或跳过空槽位 —— 它忠实反映调用时传了什么,包括 undefined 和 null。
实际场景中怎么安全处理?
多数时候你不需要手动遍历 args,而是结合解构或类型检查来提取关键参数:
- 提取前几个固定参数,其余用 rest 收集:
function log(level, message, ...meta) { console[level](message, ...meta); } - 配合默认值做兜底:
function join(separator = ',', ...parts) { return parts.join(separator); } - 避免直接透传大量参数导致堆栈溢出:rest 参数本身不触发额外开销,但后续操作(如深拷贝)需留意
真正容易被忽略的是:rest 参数对 typeof、instanceof Array 和 Array.isArray() 都返回 true,但它不是 arguments,也不受 caller 限制 —— 这些边界行为在调试和 polyfill 时会突然冒出来。
# javascript
# java
# 栈
# 区别
# 堆栈溢出
# red
# Array
# NULL
# math
# 标识符
# const
# 堆
# Length
# 形参
# 实参
# map
# console
# undefined
# function
# 对象
# typeof
# 严格模式
# 传了
# 的是
# 几个
# 就会
# 多个
# 上了
# 遍历
# 把它
# 你不
# 它是
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
Laravel如何使用.env文件管理环境变量?(最佳实践)
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
详解jQuery停止动画——stop()方法的使用
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
bing浏览器学术搜索入口_bing学术文献检索地址
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程
JavaScript如何实现错误处理_try...catch如何捕获异常?
香港服务器如何优化才能显著提升网站加载速度?
网站建设保证美观性,需要考虑的几点问题!
浅谈redis在项目中的应用
Android中AutoCompleteTextView自动提示
如何快速登录WAP自助建站平台?
Laravel如何优化应用性能?(缓存和优化命令)
音响网站制作视频教程,隆霸音响官方网站?
米侠浏览器网页图片不显示怎么办 米侠图片加载修复
nginx修改上传文件大小限制的方法
Android 常见的图片加载框架详细介绍
公司门户网站制作流程,华为官网怎么做?
如何用VPS主机快速搭建个人网站?
Laravel如何创建自定义Artisan命令?(代码示例)
重庆市网站制作公司,重庆招聘网站哪个好?
简单实现Android文件上传
北京企业网站设计制作公司,北京铁路集团官方网站?
JavaScript Ajax实现异步通信
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
Laravel如何处理和验证JSON类型的数据库字段
高防服务器:AI智能防御DDoS攻击与数据安全保障
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
免费网站制作appp,免费制作app哪个平台好?
Python自动化办公教程_ExcelWordPDF批量处理案例
如何快速搭建高效香港服务器网站?
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】
Laravel如何使用Blade模板引擎?(完整语法和示例)
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项
如何在阿里云域名上完成建站全流程?
如何在建站之星网店版论坛获取技术支持?
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
如何快速搭建虚拟主机网站?新手必看指南
Laravel如何生成API文档?(Swagger/OpenAPI教程)
Laravel如何使用Passport实现OAuth2?(完整配置步骤)
Laravel怎么为数据库表字段添加索引以优化查询
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】

