展开语法 (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