极简三分钟ES6 - ES9中对象扩展

新增Rest/Spread 复印件 vs 收纳盒

1. Spread(展开){...obj} → 复印机

功能:复制/合并对象内容

js 复制代码
// 原文件(对象)
const userProfile = { name: "小明", age: 25 };
 
// 复印机工作(创建副本)
const userCopy = { ...userProfile }; 
// { name: "小明", age: 25 }(全新对象)
 
// 合并文件(扩展属性)
const extendedProfile = { ...userProfile, job: "工程师" };
// { name: "小明", age: 25, job: "工程师" }

2. Rest(收集)const {a, ...rest} = obj → 收纳盒

功能:提取剩余属性

js 复制代码
// 杂乱桌面(对象)
const order = {
  id: "O123",
  product: "手机",
  price: 5999,
  address: "北京"
};
 
// 收纳盒整理(提取特定属性,其余打包)
const { id, product, ...orderDetails } = order;
console.log(orderDetails);  // { price: 5999, address: "北京" }

一些常见的使用场景

API响应过滤

js 复制代码
// 移除元数据 
fetch("/api/user")
  .then(res => res.json()) 
  .then(({ status, headers, ...userData }) => {
    displayUser(userData);
  });

配置合并

js 复制代码
// 深度合并配置 
const createConfig = (base, override) => ({
  ...base,
  ...override,
  styles: { ...base.styles,  ...override.styles  }
});

日志安全输出

js 复制代码
const log = (data) => {
  const { password, creditCard, ...safeData } = data;
  console.log(safeData); 
};

与传统方案对比

操作 ES5方案 ES9 Rest/Spread 优势
浅拷贝对象 Object.assign({}, obj) { ...obj } 代码减少40%
删除属性 delete obj.a; const copy= {...obj} const {a, ...copy}=obj 无副作用
提取剩余属性 手动遍历属性筛选 const {x, ...y}=obj 减少70%代码量
默认值设置 Object.assign({}, defaults, obj) { ...defaults, ...obj } 避免嵌套

需要注意的点

非对象参数处理

js 复制代码
{...undefined}  // {}(安全返回空对象)
{...'hello'}    // {0:'h',1:'e',2:'l',3:'l',4:'o'}(字符串转对象)

深拷贝陷阱

js 复制代码
const original = { a: { b: 1 } };
const copy = { ...original };
copy.a.b = 2;  // 原对象也被修改!(需用深拷贝解决)

性能优化

  • 超过10,000属性的大对象慎用
  • 替代方案:Object.assign() 在V8引擎中性能更好

牢记

复印机(Spread){...obj} → 复制/合并对象,收纳盒(Rest)const {a, ...rest} = obj → 提取剩余属性

相关推荐
壹方秘境26 分钟前
ApiCatcher支持抓包HTTP传输大文件的实现原理分享
前端·后端·客户端
一份执念38 分钟前
uni-app项目 (vue+vite + uni-UI)中引入umd格式JS文件,微信小程序中导入报错处理方案
前端·uni-app·echarts
To_OC41 分钟前
手写快排次次翻车?别死背快排模板了,这才是面试官想听的底层逻辑
javascript·算法·排序算法
ClouGence1 小时前
2026 年自动化测试工具选型指南:8 款主流工具对比
前端·测试
lichenyang4531 小时前
为什么需要双线程通信、JavaScriptProxy 和 runJavaScript 分别干什么
前端
以和为贵2 小时前
前端也能搞懂 RAG:用 JS 手写一条最小检索增强链路
前端·人工智能·面试
风止何安啊2 小时前
网课倍速痛点解决:一套前端代码实现自由控速播放器
前端·javascript·node.js
牧艺2 小时前
用 Next.js + React Three Fiber 打造 3D 快递仓储可视化
前端·three.js
锋行天下3 小时前
如何用Vite实现Vue组件的按需打包和远程加载
前端·vue.js·前端框架
光影少年3 小时前
原生DOM操作在React 中的注意事项
前端·javascript·react.js