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

相关推荐
.又是新的一天.10 分钟前
健身房预约系统SSM+Mybatis(五、预约展示)
前端·mybatis
晴殇i32 分钟前
DOM嵌套关系全解析:前端必备的4大判断方法与性能优化实战
前端·javascript·面试
字节拾光42 分钟前
console.log 打印 DOM 后内容变了?核心原因是 “引用” 而非 “快照”
javascript
似水流年_zyh42 分钟前
canvas涂抹,擦除功能组件
前端
胖虎26544 分钟前
前端多文件上传核心功能实现:格式支持、批量上传与状态可视化
前端
胖虎2651 小时前
Vue2 项目常用配置合集:多语言、SVG 图标、代码格式化、权限指令 + 主题切换
前端
一键定乾坤1 小时前
npm 源修改
前端
parade岁月1 小时前
Vue 3 响应式陷阱:对象引用丢失导致的数据更新失效
前端
掘金安东尼1 小时前
GPT-6 会带来科学革命?奥特曼最新设想:AI CEO、便宜医疗与全新计算机
前端·vue.js·github
申阳1 小时前
Day 5:03. 基于Nuxt开发博客项目-页面结构组织
前端·后端·程序员