0

0

剩余参数是什么_如何操作不定数量的参数【教程】

狼影

狼影

发布时间:2026-01-30 15:40:03

|

287人浏览过

|

来源于php中文网

原创

剩余参数(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(arguments) 简洁安全得多。

常见误用:混淆 rest 和展开语法

... 在函数定义里是 rest(收集),在函数调用或字面量中是展开(spread)。写错位置就会出问题:

PHP与MySQL程序设计3
PHP与MySQL程序设计3

本书是全面讲述PHP与MySQL的经典之作,书中不但全面介绍了两种技术的核心特性,还讲解了如何高效地结合这两种技术构建健壮的数据驱动的应用程序。本书涵盖了两种技术新版本中出现的最新特性,书中大量实际的示例和深入的分析均来自于作者在这方面多年的专业经验,可用于解决开发者在实际中所面临的各种挑战。 本书内容全面深入,适合各层次PHP和MySQL开发人员阅读,既是优秀的学习教程,也可用作参考手册。

下载
  • Math.max(...[1, 2, 3]) ✅ 正确:展开数组为独立参数
  • Math.max([1, 2, 3]) ❌ 返回 NaN:只传了一个数组参数
  • function f(...a, ...b) { } ❌ 语法错误:不允许多个 rest

注意:rest 参数不会自动“过滤 undefined”或跳过空槽位 —— 它忠实反映调用时传了什么,包括 undefinednull

实际场景中怎么安全处理?

多数时候你不需要手动遍历 args,而是结合解构或类型检查来提取关键参数:

  • 提取前几个固定参数,其余用 rest 收集:function log(level, message, ...meta) { console[level](message, ...meta); }
  • 配合默认值做兜底:function join(separator = ',', ...parts) { return parts.join(separator); }
  • 避免直接透传大量参数导致堆溢出:rest 参数本身不触发额外开销,但后续操作(如深拷贝)需留意

真正容易被忽略的是:rest 参数对 typeofinstanceof ArrayArray.isArray() 都返回 true,但它不是 arguments,也不受 caller 限制 —— 这些边界行为在调试和 polyfill 时会突然冒出来。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

236

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

458

2024.03.01

mysql标识符无效错误怎么解决
mysql标识符无效错误怎么解决

mysql标识符无效错误的解决办法:1、检查标识符是否被其他表或数据库使用;2、检查标识符是否包含特殊字符;3、使用引号包裹标识符;4、使用反引号包裹标识符;5、检查MySQL的配置文件等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

183

2023.12.04

Python标识符有哪些
Python标识符有哪些

Python标识符有变量标识符、函数标识符、类标识符、模块标识符、下划线开头的标识符、双下划线开头、双下划线结尾的标识符、整型标识符、浮点型标识符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

287

2024.02.23

java标识符合集
java标识符合集

本专题整合了java标识符相关内容,想了解更多详细内容,请阅读下面的文章。

259

2025.06.11

c++标识符介绍
c++标识符介绍

本专题整合了c++标识符相关内容,阅读专题下面的文章了解更多详细内容。

125

2025.08.07

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

531

2023.09.20

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

397

2023.07.18

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

8

2026.01.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4.3万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.6万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号