You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript扩展运算符(spread operator)的作用及代码场景疑问

JavaScript扩展运算符(Spread Operator)的作用详解

嘿,我来帮你把这个问题掰扯清楚!先分场景梳理,再针对你疑惑的“对象转数组”点做明确澄清:

你已经了解的场景:数组作为函数参数

当在函数调用里用...展开数组时,它会把数组的每个元素单独拆解成函数的参数,比如:

const numbers = [1, 2, 3];
// 等价于手动调用 Math.max(1, 2, 3)
Math.max(...numbers); // 输出 3

这个用法能帮你省去手动罗列参数的麻烦,尤其适配参数数量不固定的函数。

对象中的扩展运算符:不是转数组,是浅拷贝/合并对象

如果你看到的代码是在对象前使用...(比如const newObj = {...oldObj}),它的作用和数组场景完全不同——绝对不是把对象转换成数组,而是把原对象的所有可枚举键值对“平铺展开”到新对象中,核心用途有两个:

  • 浅拷贝对象:创建一个和原对象内容一致的新对象,修改新对象不会影响原对象(注意:嵌套的对象/数组还是引用传递,不会被深拷贝)
    const user = { name: "Alice", age: 25 };
    const copiedUser = {...user};
    copiedUser.age = 26;
    console.log(user.age); // 仍为 25,原对象不受影响
    
  • 合并多个对象:把多个对象的属性合并到一个新对象里,后面的对象会覆盖前面对象的同名属性
    const obj1 = { a: 1, b: 2 };
    const obj2 = { b: 3, c: 4 };
    const mergedObj = {...obj1, ...obj2};
    console.log(mergedObj); // { a:1, b:3, c:4 }
    

额外澄清:如何把对象转换成数组?

如果你的需求是将对象转为数组,...本身做不到这件事,得用专门的方法:

  • 提取对象的键转数组:Object.keys(user) → 输出 ["name", "age"]
  • 提取对象的值转数组:Object.values(user) → 输出 ["Alice", 25]
  • 提取键值对转二维数组:Object.entries(user) → 输出 [["name", "Alice"], ["age", 25]]

内容的提问来源于stack exchange,提问作者hje

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:52:39