一篇文章帮你彻底搞懂剩余运算符!!

什么是剩余运算符?

剩余参数也是一种操作符,它用于表示数组中的不定数量的参数。常用于将逗号隔开的值序列组合成一个数组或对象。它在语法层面将多个值组合成一个集合。

剩余运算符的特性

  • 剩余运算符只能作为函数的最后一个参数,否则会报错。
  • 剩余运算符通常是一个数组或对象。
  • 函数的 length 属性不包括剩余参数。
  • 我们可以用剩余运算符替代了 arguments 对象。
  • 使用了剩余运算符的函数内部不能显式的设置严格模式,否则会报错。

结合代码进行说明

剩余运算符之后不能再有其他参数

错误用法

js 复制代码
1.  function foo(a, ...b, c) {
  // ...
  }
//编辑器会报错, SyntaxError: Rest parameter must be last formal paramet
js 复制代码
const order = function(beverage, ...otherIngredients) {
  console.log(beverage);
  console.log(otherIngredients);
};

order('green tea', 'milk', 'brown sugar', 'mint', 'tonka'); 
// output:
// green tea 
// ['milk', 'brown sugar', 'mint', 'tonka']

剩余运算符通常是一个数组或对象。

scss 复制代码
   function foo(...values) {  
       console.log(values);
  }

  foo(2, 5, 3) //  [2, 5, 3]

函数的 length 属性不包括剩余参数。

js 复制代码
1.  (function(...a) {}).length // 0
1.  (function(a, ...b) {}).length // 1

剩余运算符替代 arguments 对象。

js 复制代码
// 使用剩余运算符获取参数列表并计算它们的总和
function sum(...numbers) {
    let total = 0;
    for (let num of numbers) {
        total += num;
    }
    return total;
}

// 使用arguments对象获取参数列表并计算它们的总和(已被剩余运算符取代)
function sumWithArguments() {
    let total = 0;
    for (let i = 0; i < arguments.length; i++) {
        total += arguments[i];
    }
    return total;
}

// 测试
console.log(sum(1, 2, 3)); // 输出 6
console.log(sumWithArguments(1, 2, 3)); // 输出 6

使用了 rest 参数的函数内部不能显示设定严格模式,否则会报错

js 复制代码
    // 报错
  const doSomething = (...a) => {
  'use strict';
  // code

通过剩余运算符来进行解构

ini 复制代码
const [a, b, ...others] = [1, 2, 3, 4, 5];
console.log(a, b, others); 
// output: 1 2 [3, 4, 5]
相关推荐
愚公搬代码19 分钟前
【愚公系列】《Web应用安全》001-VMware的安装
前端·安全
xiaohaiAIgeo20 分钟前
【2026年】HG/T 20656-2024化工暖通空调设计规范:新版标准的变化与影响
java·前端·javascript·科普知识
立少→万能汉编22 分钟前
用“立少→超文本”写静态网页,标签<倍>
服务器·前端·javascript
weixin_4316004430 分钟前
NestJS 入门(7):生命周期钩子——构造函数和 `OnModuleInit` 差在哪?
前端·后端·学习·node.js·nest.js
你挚爱的强哥1 小时前
【chromeDownload】自定义组件:多用于登录框底部提供下载Chrome谷歌浏览器的链接
前端·vue.js·chrome
cindershade1 小时前
用原生 HTML5 视频与 Canvas 实现浏览器端视频抽帧封面
前端
笨鸟先飞,勤能补拙1 小时前
Web 服务器与计算机网络全景原理
运维·服务器·前端·网络·人工智能·计算机网络·web安全
NutShell Wang2 小时前
Wails v3 Beta 实战:用显式对象模型重写你的第一个 Go 桌面应用
前端·人工智能·go·vibe coding
cindershade2 小时前
前端国际化工程实践:语言包拆分、动态加载与日期数字格式统一
前端
kisbad2 小时前
Day 036|OpenAI Agents SDK 快速开始:今天跑通第一个 Agent
java·前端·javascript