展开语法 ...

js/operators/spread2026-08-24 19:46:25

展开语法 (Spread syntax), 可以在函数调用/数组构造时,将数组表达式或者 string 在语法层面展开;还可以在构造字面量对象时,将对象表达式按 key-value 的方式展开。

展开语法不是一个运算符,因此没有优先级。它是数组/对象字面量和函数调用语法的一部分。

语法

函数调用

myFunction(...iterableObj);

展开数组时,会将数组中每个元素作为一个函数参数。

构造字面量数组

[...iterableObj, '4', ...'hello', 6];

展开数组时,会将每个元素复制到新数组中。展开语法和 Object.assign() 行为一致,执行的都是浅拷贝。

展开字符串时,会将每个字符作为数组中的一个元素构造一个新数组,然后和展开数组时相同。

[...'hello']
// ['h', 'e', 'l', 'l', 'o']

无法展开不可迭代对象。

构造字面量对象

构造字面量对象时,进行克隆或者属性拷贝(ECMAScript 2018 规范新增特性)。

let objClone = { ...obj };

展开对象时,会将对象的键值对复制给新对象。

展开数组时,会将数组的索引作为键,元素作为值,看作一个对象,然后和展开对象相同。

展开字符串时,会将每个字符作为数组中的一个元素,然后和展开数组相同。

参考

展开语法
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Spread_syntax

本页目录