js的扩展运算符的理解

如果说 ref 是盒子,reactive 是背包,那么 ... 扩展运算符就是一把"暴力拆解剪刀"


1. 核心概念:把东西"倒出来"

想象你手里有一个装着水果的篮子 (数组)或者一个装着证件的信封 (对象)。

这三个点 ... 的唯一作用就是:把篮子或信封撕开,把里面的东西一件件平铺在桌子上。

数组示例:合并篮子
javascript 复制代码
const 苹果篮 = ['红苹果', '青苹果'];
const 梨子篮 = ['皇冠梨', '雪梨'];

// 如果你不用 ...
const 大篮子 = [苹果篮, 梨子篮]; 
// 结果是:[['红苹果', '青苹果'], ['皇冠梨', '雪梨']] ------ 篮子里套着篮子,这不对。

// 如果你用了 ...(剪刀)
const 真正的大篮子 = [...苹果篮, ...梨子篮];
// 结果是:['红苹果', '青苹果', '皇冠梨', '雪梨'] ------ 东西全倒出来合在了一起。

2. 在对象里的妙用:复印与修改

在写 MineAdmin 的表单或者配置时,这个用法最常见。

想象你有一张入职表单(对象),现在你要录入一个新员工,他的大部分信息和老员工一样,只有名字不同。

javascript 复制代码
const 老员工 = { 
  公司: 'Apple', 
  部门: '研发部', 
  城市: '北京' 
};

// 使用 ... 就像是拿老员工的表去复印机复印了一份,然后改个名字
const 新员工 = {
  ...老员工,
  姓名: '张三'
};

// 结果:新员工拥有了老员工的所有属性,同时多了(或覆盖了)姓名。

3. 为什么它是"进阶"必备?(解决引用难题)

问题场景:

如果你直接写 const a = b,在 JS 里这叫"共享同一个引用"。你改了 ab 也会变,这经常导致 Vue 的数据乱套。

解决办法:

javascript 复制代码
const 原始数据 = { name: 'Gemini', age: 18 };

// 拿剪刀拆开,重新装进一个新盒子里
const 备份数据 = { ...原始数据 }; 

备份数据.age = 25; 
// 此时:备份数据变了,但"原始数据"还是 18 岁。它们彻底独立了!

4. 配合 Vue 3 的实战:解构响应式对象

在你刚才写的 HelloWorld.vue 例子里,如果我们要把多个状态传给子组件,扩展运算符就非常顺手:

javascript 复制代码
const state = reactive({
  id: 1,
  title: '标题',
  color: 'red'
});

// 在模板里或者传参时
// <MyComponent v-bind="state" /> 
// 这在 Vue 底层其实就相当于做了一次"展开"

5. 总结口诀

  • 看到 ... 就脑补一把剪刀。
  • 数组用它: 把元素排排坐。
  • 对象用它: 把属性全摊开,方便复印和修改。
  • 记住: 它只拆第一层。如果是"大盒套小盒",小盒子里的东西还是原来的(浅拷贝)。

这就是为什么它叫"扩展"------因为它把一个整体,"扩展"成了零散的个体。

相关推荐
web小白成长日记5 小时前
企业级 Vue3 + Element Plus 主题定制架构:从“能用”到“好用”的进阶之路
前端·架构
APIshop6 小时前
Python 爬虫获取 item_get_web —— 淘宝商品 SKU、详情图、券后价全流程解析
前端·爬虫·python
风送雨6 小时前
FastMCP 2.0 服务端开发教学文档(下)
服务器·前端·网络·人工智能·python·ai
XTTX1106 小时前
Vue3+Cesium教程(36)--动态设置降雨效果
前端·javascript·vue.js
LYFlied7 小时前
WebGPU与浏览器边缘智能:开启去中心化AI新纪元
前端·人工智能·大模型·去中心化·区块链
Setsuna_F_Seiei7 小时前
2025 年度总结:人生重要阶段的一年
前端·程序员·年终总结
model20057 小时前
alibaba linux3 系统盘网站迁移数据盘
java·服务器·前端
han_8 小时前
从一道前端面试题,谈 JS 对象存储特点和运算符执行顺序
前端·javascript·面试
aPurpleBerry8 小时前
React 01 目录结构、tsx 语法
前端·react.js
jayaccc8 小时前
微前端架构实战全解析
前端·架构