如果只说 展开运算符,可能小伙伴会一脸懵逼,你在说啥啊?
但是如果换成另一种说法:[...object]
,那么小伙伴可能恍然大悟:“噢~ 你说 ES6 的这个表达式啊!”
-
原文:MDN - 展开语法
-
功能:展开语法(Spread syntax),可以在函数调用/数组构造时,将数组表达式或者
string
在语法层面展开;还可以在构造字面量对象时,将对象表达式按 key-value 的方式展开。 -
语法:
- 函数调用:
myFunction(...iterableObj);
- 字面量数组构造或字符串:
[...iterableObj, '4', ...'hello', 6];
- 构造字面量对象时,进行克隆或者属性拷贝(ECMAScript 2018规范新增特性):
let objClone = { ...obj };
- 说明:
展开语法和 Object.assign()
行为是一致的,执行的都是浅拷贝(只遍历一层)。如果需要更深层次的拷贝,那么就会出问题。
var arr1 = [1, 2, 3];
var arr2 = [...arr1]; // like arr.slice()
arr2.push(4);
console.log(arr1); // [ 1, 2, 3 ]
console.log(arr2); // [ 1, 2, 3, 4 ]
当然,展开运算符还有更多的功能,例如连接多个数组:
var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];
var arr3 = [...arr1, ...arr2];
console.log(arr3); // [ 0, 1, 2, 3, 4, 5 ]