• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
思想人生从关注生活开始
博客园    首页    新随笔    联系   管理    订阅  订阅

JavaScript 扩展运算符 ... 核心解析


1. ‌基本定义与作用‌

扩展运算符‌(Spread Operator)... 是 ES6 引入的语法,用于‌将可迭代对象(如数组、对象)展开为独立元素‌,支持数组、对象、函数参数等多种场景。


核心能力‌:


快速展开数组或对象内容,实现‌浅拷贝‌、‌合并‌或‌参数传递‌等操作。
简化代码逻辑,替代传统 concat()、apply() 等方法。


2. ‌典型使用场景‌


场景 1:数组展开‌

const arr1 = [1, 2];
const arr2 = [3, 4];
const merged = [...arr1, ...arr2]; // [1, 2, 3, 4]

// 替代 concat
const copy = [...arr1]; // [1, 2](浅拷贝)

  

场景 2:对象展开‌

const obj1 = { a: 1, b: 2 };
const obj2 = { ...obj1, c: 3 }; // { a: 1, b: 2, c: 3 }

// 合并对象(重复属性后者覆盖前者)
const mergedObj = { ...obj1, b: 3 }; // { a: 1, b: 3 }

  

场景 3:函数参数传递‌

function sum(a, b, c) { return a + b + c; }
const nums = [1, 2, 3];
sum(...nums); // 6(替代 apply)

// 动态参数场景
const dynamicArgs = [10, 20];
sum(5, ...dynamicArgs); // 35

 

 

场景 4:解构赋值‌

const [first, ...rest] = [1, 2, 3];
console.log(first); // 1
console.log(rest); // [2, 3]

const { x, ...others } = { x: 1, y: 2, z: 3 };
console.log(others); // { y: 2, z: 3 }

  

3. ‌与剩余参数(Rest Parameters)的区别‌


对比项‌ ‌扩展运算符 ...‌ ‌剩余参数 ...‌
使用位置‌ 数组/对象前、函数调用时参数列表 函数声明时参数列表
作用方向‌ 展开(拆包) 聚合(打包)
典型示例‌ [...arr]、func(...args) function(a, ...rest) { ... }


4. ‌注意事项‌

 

浅拷贝问题‌:

const nested = [{ a: 1 }];
const copy = [...nested];
copy.a = 2;
console.log(nested.a); // 2(原对象被修改)

 

嵌套对象/数组的拷贝需使用深拷贝方法(如 JSON.parse(JSON.stringify()))。

不可迭代对象限制‌:

const obj = { a: 1 };
[...obj]; // TypeError: obj is not iterable

 

普通对象不可直接展开,但可通过 Object.entries() 转换后使用。

浏览器兼容性‌:
需注意旧版浏览器(如 IE)不支持,建议使用 Babel 转译。

5. ‌实际应用案例‌

React 状态更新‌:

 

setState(prev => ({ ...prev, count: prev.count + 1 }));

动态生成 DOM 元素‌:
javascript
Copy Code
const children = [<div>A</div>, <div>B</div>];
return <div>{...children}</div>;

  


通过合理使用扩展运算符,可显著提升代码简洁性与可读性,尤其适用于数据聚合、状态管理和函数式编程场景。

posted @ 2025-03-27 16:52  JackYang  阅读(103)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3