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.nested和userConfig.nested仍是独立引用 - 不能展开
null或undefined,否则报错;可用空值合并:{ ...(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,会语法错误;必须在[]、{}或()内
真正容易被忽略的是:它对 null、undefined、普通对象(非可迭代)直接展开会报错,而很多人只在开发环境试过“有值”的情况,上线后遇到空数据就崩。用之前先判空,比事后 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跨域请求?(配置示例)


rr1 = [1, 2];
const arr2 = [3, 4];
const merged = [...arr1, ...arr2]; // → [1, 2, 3, 4]