javascript展开运算符是什么_它有哪些常见用途?

发布时间 - 2026-01-05 00:00:00    点击率:
展开语法...用于数组、对象、函数调用等场景,实现浅拷贝、合并、解构等功能,但不可单独使用,且对null/undefined会报错。

... 是 JavaScript 中用于“展开”可迭代对象(如数组、字符串、Map、Set)或对象属性的语法糖,不是运算符,也不能单独存在——它必须出现在数组字面量 [...arr]、对象字面量 {...obj} 或函数调用 func(...arr) 中。


合并数组时怎么避免嵌套?

常见错误是写成 [arr1, arr2],结果得到二维数组 [[1,2], [3,4]]。正确做法是加 ... 展开:

const arr1 = [1, 2];
const arr2 = [3, 4];
const merged = [...arr1, ...arr2]; // → [1, 2, 3, 4]
  • 支持插入字面量:[...arr1, 99, ...arr2]
  • 不修改原数组,返回新数组
  • 若需去重合并,可结合 Set[...new Set([...arr1, ...arr2])]

对象合并时同名属性谁生效?

对象展开按顺序覆盖:后写的属性会覆盖前面同名的值。

const defaults = { theme: 'light', lang: 'en' };
const userConfig = { theme: 'dark' };
const config = { ...defaults, ...userConfig }; // → { theme: 'dark', lang: 'en' }
  • 适合配置项覆盖场景(如默认配置 + 用户覆盖)
  • 仅浅合并:嵌套对象不会递归合并,defaults.nesteduserConfig.nested 仍是独立引用
  • 不能展开 nullundefined,否则报错;可用空值合并:{ ...(obj ?? {}) }

传参给函数时为什么不用 apply 了?

过去要写 Math.max.apply(null, arr),现在直接 Math.max(...arr) 更直观安全。

const numbers = [7, 2, 9];
console.log(Math.max(...numbers)); // → 9
console.log(sum(...numbers));       // → 18(假设 sum(a,b,c) => a+b+c)
  • 替代 func.apply(this, args) 的标准写法
  • 构造函数也适用:new Date(...[2025, 0, 1])
  • 注意:超大数组(>10万元素)可能触发栈溢出,此时应改用循环或 Math.max.apply(虽已过时但更耐扛)

复制和解构时要注意什么?

[...arr]{...obj} 都是浅拷贝——只复制第一层,嵌套结构仍共享引用。

const original = { a: 1, b: { c: 2 } };
const copy = { ...original };
copy.b.c = 99;
console.log(original.b.c); // → 99(被意外改了!)
  • 字符串也能展开:[...'hi'] → ['h', 'i'],常用于字符遍历或去重
  • 解构中配合剩余参数:const [first, second, ...rest] = [1,2,3,4,5];
  • 不能单独写 ...arr,会语法错误;必须在 []{}()

真正容易被忽略的是:它对 nullundefined、普通对象(非可迭代)直接展开会报错,而很多人只在开发环境试过“有值”的情况,上线后遇到空数据就崩。用之前先判空,比事后 debug 快得多。


# javascript  # java  # app  #   # 开发环境  # 可迭代对象  # 为什么 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  如何用花生壳三步快速搭建专属网站?  Swift中swift中的switch 语句  php json中文编码为null的解决办法  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  三星、SK海力士获美批准:可向中国出口芯片制造设备  PHP 500报错的快速解决方法  网站建设保证美观性,需要考虑的几点问题!  如何在Ubuntu系统下快速搭建WordPress个人网站?  香港服务器WordPress建站指南:SEO优化与高效部署策略  如何续费美橙建站之星域名及服务?  如何做网站制作流程,*游戏网站怎么搭建?  jQuery 常见小例汇总  如何正确选择百度移动适配建站域名?  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  Laravel模型事件有哪些_Laravel Model Event生命周期详解  Laravel安装步骤详细教程_Laravel环境搭建指南  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  如何快速搭建虚拟主机网站?新手必看指南  Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】  简单实现Android验证码  如何用腾讯建站主机快速创建免费网站?  如何用AWS免费套餐快速搭建高效网站?  如何在企业微信快速生成手机电脑官网?  在Oracle关闭情况下如何修改spfile的参数  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  googleplay官方入口在哪里_Google Play官方商店快速入口指南  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  网站制作大概多少钱一个,做一个平台网站大概多少钱?  电商网站制作价格怎么算,网上拍卖流程以及规则?  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  公司门户网站制作流程,华为官网怎么做?  浅谈Javascript中的Label语句  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  香港服务器网站卡顿?如何解决网络延迟与负载问题?  Laravel怎么使用Intervention Image库处理图片上传和缩放  JavaScript常见的五种数组去重的方式  JavaScript中的标签模板是什么_它如何扩展字符串功能  如何快速生成高效建站系统源代码?  如何快速生成ASP一键建站模板并优化安全性?  个人网站制作流程图片大全,个人网站如何注销?  如何确保FTP站点访问权限与数据传输安全?  Python进程池调度策略_任务分发说明【指导】  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  Laravel如何处理CORS跨域请求?(配置示例)