极简三分钟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 → 提取剩余属性

相关推荐
前端摸鱼匠1 小时前
Vue 3 的v-bind合并行为:讲解v-bind与普通属性合并的规则
前端·javascript·vue.js·前端框架·ecmascript
REDcker1 小时前
浏览器端Web程序性能分析与优化实战 DevTools指标与工程清单
开发语言·前端·javascript·vue·ecmascript·php·js
donecoding3 小时前
一个 sudo 引发的血案:npm 全局包权限错乱彻底修复
前端·node.js·前端工程化
风骏时光牛马3 小时前
Raku正则匹配与数据批量处理实操案例
前端
nbwenren3 小时前
2026实测:Gemini 3 镜像站视觉能力实践——拍照原型图,一键生成 HTML+CSS 代码
前端·css·html
Lee川3 小时前
Prisma 实战指南:像搭积木一样设计古诗词数据库
前端·数据库·后端
Linsk3 小时前
Java和JavaScript的关系真是雷峰和雷峰塔的关系吗?
java·javascript·oracle
当时只道寻常3 小时前
浏览器文本复制到剪贴板:企业级最佳实践
javascript
jinanwuhuaguo3 小时前
(第二十九篇)OpenClaw 实时与具身的跃迁——从异步孤岛到数字世界的“原住民”
前端·网络·人工智能·重构·openclaw