- Javascript 基础教程
- Javascript – 首页
- JavaScript – 路线图
- JavaScript – 概述
- JavaScript – 特性
- JavaScript – 启用
- JavaScript – 位置
- JavaScript – 语法
- JavaScript – Hello World
- JavaScript – Console.log()
- JavaScript – 注释
- JavaScript – 变量
- JavaScript – let 语句
- JavaScript – 常量
- JavaScript – 数据类型
- JavaScript – 类型转换
- JavaScript – 严格模式
- JavaScript – 保留关键字
- JavaScript 运算符
- JavaScript – 运算符
- JavaScript – 算术运算符
- JavaScript – 比较运算符
- JavaScript – 逻辑运算符
- JavaScript – 位运算符
- JavaScript – 赋值运算符
- JavaScript – 条件运算符
- JavaScript – typeof 运算符
- JavaScript – 空值合并运算符
- JavaScript – delete 运算符
- JavaScript – 逗号运算符
- JavaScript – 分组运算符
- JavaScript – yield 运算符
- JavaScript – 展开运算符
- JavaScript – 指数运算符
- JavaScript – 运算符优先级
- JavaScript 控制流
- JavaScript – if...else
- JavaScript – while 循环
- JavaScript – for 循环
- JavaScript – for...in
- Javascript – for...of
- JavaScript – 循环控制
- JavaScript – break 语句
- JavaScript – continue 语句
- JavaScript – switch case
- JavaScript – 用户定义迭代器
- JavaScript 函数
- JavaScript – 函数
- JavaScript – 函数表达式
- JavaScript – 函数参数
- JavaScript – 默认参数
- JavaScript – Function() 构造函数
- JavaScript – 函数提升
- JavaScript – 自执行函数
- JavaScript – 箭头函数
- JavaScript – 函数调用
- JavaScript – Function call()
- JavaScript – Function apply()
- JavaScript – Function bind()
- JavaScript – 闭包
- JavaScript – 变量作用域
- JavaScript – 全局变量
- JavaScript – 智能函数参数
- JavaScript 对象
- JavaScript – Number
- JavaScript – Boolean
- JavaScript – String
- JavaScript – Array
- JavaScript – Date
- JavaScript – DataView
- JavaScript – Handler
- JavaScript – Math
- JavaScript – RegExp
- JavaScript – Symbol
- JavaScript – Set
- JavaScript – WeakSet
- JavaScript – Map
- JavaScript – WeakMap
- JavaScript – 可迭代对象
- JavaScript – Reflect
- JavaScript – TypedArray
- JavaScript – 模板字面量
- JavaScript – 标记模板
- 面向对象的 JavaScript
- JavaScript – 对象
- JavaScript – 类
- JavaScript – 对象属性
- JavaScript – 对象方法
- JavaScript – 静态方法
- JavaScript – 显示对象
- JavaScript – 对象访问器
- JavaScript – 对象构造函数
- JavaScript – 原生原型
- JavaScript – ES5 对象方法
- JavaScript – 封装
- JavaScript – 继承
- JavaScript – 抽象
- JavaScript – 多态
- JavaScript – 解构赋值
- JavaScript – 对象解构
- JavaScript – 数组解构
- JavaScript – 嵌套解构
- JavaScript – 可选链
- JavaScript – 全局对象
- JavaScript – Mixins
- JavaScript – 代理 (Proxies)
- JavaScript 版本
- JavaScript – 历史
- JavaScript – 版本
- JavaScript – ES5
- JavaScript – ES6
- ECMAScript 2016
- ECMAScript 2017
- ECMAScript 2018
- ECMAScript 2019
- ECMAScript 2020
- ECMAScript 2021
- ECMAScript 2022
- JavaScript 异步编程
- JavaScript – 异步编程
- JavaScript – 回调函数
- JavaScript – Promise
- JavaScript – Async/Await
- JavaScript – 微任务
- JavaScript – Promisification (Promise 化)
- JavaScript – Promise 链式调用
- JavaScript – 定时事件
- JavaScript – setTimeout()
- JavaScript – setInterval()
- JavaScript Cookie
- JavaScript – Cookie
- JavaScript – Cookie 属性
- JavaScript – 删除 Cookie
- JavaScript 浏览器 BOM
- JavaScript – 浏览器对象模型
- JavaScript – Window 对象
- JavaScript – Document 对象
- JavaScript – Screen 对象
- JavaScript – History 对象
- JavaScript – Navigator 对象
- JavaScript – Location 对象
- JavaScript – Console 对象
- JavaScript Web API
- JavaScript – Web API
- JavaScript – History API
- JavaScript – Storage API
- JavaScript – Forms API
- JavaScript – Worker API
- JavaScript – Fetch API
- JavaScript – Geolocation API
- JavaScript 事件
- JavaScript – 事件
- JavaScript – DOM 事件
- JavaScript – addEventListener()
- JavaScript – 鼠标事件
- JavaScript – 键盘事件
- JavaScript – 表单事件
- JavaScript – Window/Document 事件
- JavaScript – 事件委托
- JavaScript – 事件冒泡
- JavaScript – 事件捕获
- JavaScript – 自定义事件
- JavaScript 错误处理
- JavaScript – 错误处理
- JavaScript – try...catch
- JavaScript – 调试
- JavaScript – 自定义错误
- JavaScript – 扩展错误
- JavaScript 重要关键字
- JavaScript – this 关键字
- JavaScript – void 关键字
- JavaScript – new 关键字
- JavaScript – var 关键字
- JavaScript HTML DOM
- JavaScript – HTML DOM
- JavaScript – DOM 方法和属性
- JavaScript – DOM Document
- JavaScript – DOM 元素
- JavaScript – DOM 属性 (Attr)
- JavaScript – DOM 表单
- JavaScript – 更改 HTML
- JavaScript – 更改 CSS
- JavaScript – DOM 动画
- JavaScript – DOM 导航
- JavaScript – DOM 集合
- JavaScript – DOM NodeList
- JavaScript – DOM DOMTokenList
- JavaScript 其他
- JavaScript – Ajax
- JavaScript – 异步迭代
- JavaScript – Atomics 对象
- JavaScript – 其余参数
- JavaScript – 页面重定向
- JavaScript – 对话框
- JavaScript – 页面打印
- JavaScript – 验证
- JavaScript – 动画
- JavaScript – 多媒体
- JavaScript – 图片地图
- JavaScript – 浏览器
- JavaScript – JSON
- JavaScript – 多行字符串
- JavaScript – 日期格式
- JavaScript – 获取日期方法
- JavaScript – 设置日期方法
- JavaScript – 模块
- JavaScript – 动态导入
- JavaScript – BigInt
- JavaScript – Blob
- JavaScript – Unicode
- JavaScript – 浅拷贝
- JavaScript – 调用栈
- JavaScript – 引用类型
- JavaScript – IndexedDB
- JavaScript – 点击劫持攻击
- JavaScript – 柯里化
- JavaScript – 图形
- JavaScript – Canvas
- JavaScript – 防抖
- JavaScript – 性能
- JavaScript – 样式指南
JavaScript – 其余参数
其余参数
JavaScript 中的其余参数允许函数以数组的形式接受可变数量的参数。当需要传递给函数的参数数量不固定时,可以使用其余参数。
JavaScript 其余参数允许您将所有剩余的参数收集到单个数组中。其余参数由三个点 (...) 后跟参数名称表示。此参数名称是包含所有剩余参数的数组。
其余参数语法
JavaScript 中的其余参数涉及在函数声明中使用三个点 (...) 后跟参数名称。
function functionName(para1, para2, ...theArgs){
// function body;
}
这里para1 和 para2 是普通参数,而 theArgs 是其余参数。其余参数收集其余参数(此处,除对应于参数 para1 和 para1 的参数之外的参数),并将其赋值给名为 theArgs 的数组。
我们也可以在函数表达式中编写其余参数,与函数声明相同。
其余参数应始终是函数定义中的最后一个参数。
function funcName(...para1, para2, para2){}
// SyntaxError: Invalid or unexpected token
函数定义只能有一个其余参数。
function funcName(para1, ...para2, ...para3){}
//SyntaxError: Rest parameter must be last formal parameter
示例:可变长度参数列表
当您想要定义一个可以处理可变数量参数的函数时,其余参数非常有用。让我们来看下面的例子:
<html>
<body>
<div> Rest parameter allows function to accept nay number of arguments.</div>
<div id = "demo"> </div>
<script>
function sum(...nums) {
let totalSum = 0;
for (let num of nums) {
totalSum += num;
}
return totalSum;
}
document.getElementById("demo").innerHTML =
sum(10, 20, 30, 40) + "<br>" +
sum(10, 20) + "<br>" +
sum();
</script>
</body>
</html>
输出
Rest parameter allows function to accept nay number of arguments. 100 30 0
这里,其余参数 nums 允许函数接受任意数量的数字参数。
示例:查找最大数
JavaScript 其余参数简化了在给定的一组数字中查找最大数的过程。
在这个例子中,我们使用其余参数 numbers 来收集传递给函数的所有参数。展开运算符用于将各个值传递给 Math.max() 函数。
<html>
<body>
<div> Finding the maximum number</div>
<div id = "demo"> </div>
<script>
function getMax(...args){
return Math.max(...args);
}
document.getElementById("demo").innerHTML =
getMax(10,20,30,40) + "<br>" +
getMax(10,20,30);
</script>
</body>
</html>
输出
Finding the maximum number 40 30
这里其余参数 args 允许函数 getMax 接受任意数量的参数。
展开运算符和其余参数
展开运算符 (...) 与其余参数密切相关,并且经常与它们一起使用。其余参数将函数参数收集到数组中,而展开运算符执行相反的操作,将数组的元素展开为单个参数。
在上面查找最大数的示例中,我们使用了其余参数和展开运算符。
function getMax(...args){ // here ...args as rest parameter
return Math.max(...args); // here ... works as spread operator
}
示例
在这个例子中,展开运算符 ... 用于将 numbers 数组的元素作为单个参数传递给 multiply 函数。
<html>
<body>
<div> Spread operator in JavaScript<div>
<div id="demo"></div>
<script>
function multiply(a, b, c) {
return a * b * c;
}
const numbers = [2, 3, 4];
document.getElementById("demo").innerHTML = multiply(...numbers);
</script>
</body>
</html>
输出
Spread operator in JavaScript 24
其余参数与 arguments 对象
其余参数的引入对我们如何处理可变长度参数列表(与使用 arguments 对象相比)具有影响。让我们比较这两种方法
其余参数
<html>
<body>
<div> Sum using rest parameter in JavaScript:</div>
<div id = "demo"> </div>
<script>
function sum(...numbers) {
return numbers.reduce((total, num) => total + num, 0);
}
document.getElementById("demo").innerHTML = sum(1, 2, 3, 4, 5);
</script>
</body>
</html>
输出
Sum using rest parameter in JavaScript: 15
arguments 对象
<html>
<body>
<div> Sum using arguments object in JavaScript:</div>
<div id = "demo"> </div>
<script>
function sum() {
const argsArray = Array.from(arguments);
return argsArray.reduce((total, num) => total + num, 0);
}
document.getElementById("demo").innerHTML = sum(1, 2, 3, 4, 5);
</script>
</body>
</html>
输出
Sum using arguments object in JavaScript: 15
虽然这两种方法都达到了相同的结果,但其余参数语法更简洁易读。它也与其他现代 JavaScript 功能更一致。
使用其余参数进行解构
解构赋值是在 ES6 中引入的。它允许我们访问数组的各个值,而无需使用数组索引。我们可以使用解构赋值从其余参数创建的数组中提取值。
示例
在下面的示例中,解构赋值从 numbers 数组中提取前两个元素。
<html>
<body>
<div> Destructuring assignment with rest parameter</div>
<div id = "demo"> </div>
<script>
function getFirstTwo(...numbers) {
const [first, second] = numbers;
return `First: ${first}, Second: ${second}`;
}
document.getElementById("demo").innerHTML = getFirstTwo(1, 2, 3, 4, 5);
</script>
</body>
</html>
输出
Destructuring assignment with rest parameter First: 1, Second: 2