javascript展开运算符是什么_有哪些应用场景【教程】
发布时间 - 2026-01-22 00:00:00 点击率:次展开运算符(...)是JavaScript中将可迭代对象解包为独立值的底层能力,用于数组合并、函数传参、浅拷贝、类数组转换等,但不支持深拷贝、null/undefined展开及原型属性继承。
展开运算符(...)不是语法糖,是 JavaScript 中真正改变数据操作方式的底层能力——它把“可迭代对象”转成一串独立值,不是复制,而是解包。
展开运算符在数组中怎么用?
最常见用途:替代 Array.prototype.concat() 或 Array.prototype.push.apply()。它不修改原数组,只生成新结构。
-
[...arr1, ...arr2]合并数组比arr1.concat(arr2)更直观,且支持多个源、中间插入字面量(如[...a, 0, ...b]) - 函数调用时传参:
Math.max(...numbers)可直接展开,避免写Math.max.apply(null, numbers) - 浅拷贝数组:
const copy = [...original],但注意嵌套对象仍共享引用 - 转换类数组对象(如
arguments、NodeList)为真数组:[...document.querySelectorAll('div')]
对象展开有哪些限制和陷阱?
对象展开只处理**自身可枚举属性**,且按声明顺序覆盖——后写的同名键会覆盖前面的。
- 合并对象:
{ ...a, ...b }等价于Object.assign({}, a, b),但不能展开null或undefined(会报TypeError: Cannot spread non-iterable instance) - 无法展开原型链上的属性,也不能展开 symbol 键(除非显式用
Object.getOwnPropertySymbols()配合) - 深拷贝?不行。例如
const obj = { x: { y: 1 } }; const copy = { ...obj };,修改copy.x.y仍会影响obj.x.y
为什么函数参数里用 ...rest 和展开运算符不是一回事?
虽然都用 ... 符号,但语义相反:一个是「收」(rest 参数),一个是「放」(展开)。混淆会导致常见错误。
- rest 参数用于函数定义:
function f(a, ...rest) { },rest是数组;展开用于调用或字面量:f(...arr) - rest 只能出现在参数列表末尾;展开可以出现在任意位置(如
[first, ...middle, last]) - rest 不接受空位(
function(...[]) {}报错),但展开允许空数组:[...[], 1]→[1]
哪些地方不能用展开运算符?
不是所有“看起来像集合”的东西都能展开,关键看是否实现了 Symbol.iterator。
- 普通对象默认不可展开(会报错),必须是可迭代对象(
Array、String、Map、Set、生成器函数返回值等) -
arguments在非箭头函数中可用,但箭头函数没有arguments,得靠 rest 参数代替 - DOM 元素集合(如
HTMLCollection)在较老浏览器(如 IE)中不支持展开,需先转成数组 - 展开
undefined或null直接抛错,建议加判断:...(arr ?? [])
真正容易被忽略的是:展开运算符的执行时机是**运行时解包**,不是编译期宏替换。这意味着它依赖目标值的实际类型和迭代器实现,动态性高,但也意味着出错往往在数据进入时才暴露,而不是写代码时。
# javascript
# java
# html
# node
# 浏览器
# app
# 可迭代对象
# 为什么
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
在线制作视频网站免费,都有哪些好的动漫网站?
Linux系统命令中tree命令详解
Laravel Admin后台管理框架推荐_Laravel快速开发后台工具
Java解压缩zip - 解压缩多个文件或文件夹实例
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
如何在 React 中条件性地遍历数组并渲染元素
如何撰写建站申请书?关键要点有哪些?
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
网易LOFTER官网链接 老福特网页版登录地址
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
长沙做网站要多少钱,长沙国安网络怎么样?
中山网站制作网页,中山新生登记系统登记流程?
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
黑客入侵网站服务器的常见手法有哪些?
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
Firefox Developer Edition开发者版本入口
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用
猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】
如何在万网开始建站?分步指南解析
千库网官网入口推荐 千库网设计创意平台入口
三星网站视频制作教程下载,三星w23网页如何全屏?
Laravel如何实现用户注册和登录?(Auth脚手架指南)
Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
如何在阿里云完成域名注册与建站?
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
jquery插件bootstrapValidator表单验证详解
PythonWeb开发入门教程_Flask快速构建Web应用
javascript中闭包概念与用法深入理解
Laravel Octane如何提升性能_使用Laravel Octane加速你的应用
Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
在线制作视频的网站有哪些,电脑如何制作视频短片?
如何用腾讯建站主机快速创建免费网站?
如何快速使用云服务器搭建个人网站?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
googleplay官方入口在哪里_Google Play官方商店快速入口指南
UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】
Laravel如何处理异常和错误?(Handler示例)
Laravel如何为API生成Swagger或OpenAPI文档
高性能网站服务器配置指南:安全稳定与高效建站核心方案


