在 JavaScript 中,省略号(spread operator)是一个非常有用的特性。它可以将数组或对象“展开”成多个独立的元素,或者将多个独立的元素组合成一个数组或对象。在 ES2019 中,省略号有了更多的应用场景和语法变化,下面将详细介绍它的用法和指导意义。
一、数组中的省略号
1. 展开数组
使用省略号可以将一个数组展开成多个独立的元素,例如:
const arr1 = [1, 2, 3]; const arr2 = [...arr1, 4, 5, 6]; console.log(arr2); // [1, 2, 3, 4, 5, 6]
在上面的代码中,省略号将 arr1
数组展开成了三个独立的元素,然后与后面的三个元素组合成了一个新的数组 arr2
。
2. 合并数组
使用省略号还可以将多个独立的数组合并成一个数组,例如:
const arr1 = [1, 2, 3]; const arr2 = [4, 5, 6]; const arr3 = [...arr1, ...arr2]; console.log(arr3); // [1, 2, 3, 4, 5, 6]
在上面的代码中,省略号将 arr1
和 arr2
两个数组分别展开成了独立的元素,然后合并成了一个新的数组 arr3
。
3. 数组拷贝
使用省略号还可以快速拷贝一个数组,例如:
const arr1 = [1, 2, 3]; const arr2 = [...arr1]; console.log(arr2); // [1, 2, 3]
在上面的代码中,省略号将 arr1
数组展开成了独立的元素,然后又组合成了一个新的数组 arr2
,相当于对 arr1
数组进行了深拷贝。
二、对象中的省略号
1. 展开对象
使用省略号可以将一个对象展开成多个独立的属性,例如:
const obj1 = {a: 1, b: 2, c: 3}; const obj2 = {...obj1, d: 4, e: 5, f: 6}; console.log(obj2); // {a: 1, b: 2, c: 3, d: 4, e: 5, f: 6}
在上面的代码中,省略号将 obj1
对象展开成了三个独立的属性,然后与后面的三个属性组合成了一个新的对象 obj2
。
2. 合并对象
使用省略号还可以将多个独立的对象合并成一个对象,例如:
const obj1 = {a: 1, b: 2, c: 3}; const obj2 = {d: 4, e: 5, f: 6}; const obj3 = {...obj1, ...obj2}; console.log(obj3); // {a: 1, b: 2, c: 3, d: 4, e: 5, f: 6}
在上面的代码中,省略号将 obj1
和 obj2
两个对象分别展开成了独立的属性,然后合并成了一个新的对象 obj3
。
3. 对象拷贝
使用省略号还可以快速拷贝一个对象,例如:
const obj1 = {a: 1, b: 2, c: 3}; const obj2 = {...obj1}; console.log(obj2); // {a: 1, b: 2, c: 3}
在上面的代码中,省略号将 obj1
对象展开成了独立的属性,然后又组合成了一个新的对象 obj2
,相当于对 obj1
对象进行了浅拷贝。
三、函数中的省略号
在函数中使用省略号可以接收不定数量的参数,例如:
function sum(...nums) { return nums.reduce((total, num) => total + num, 0); } console.log(sum(1, 2, 3)); // 6 console.log(sum(4, 5, 6, 7)); // 22
在上面的代码中,省略号将传入的参数展开成了一个数组 nums
,然后可以对这个数组进行遍历或者其他操作。
四、总结
省略号是一种非常实用的特性,在 ES2019 中有了更多的应用场景和语法变化,可以简化代码、提高效率。在使用省略号时需要注意深浅拷贝的问题,以及不同类型的数据结构的展开方式。希望本文能够对大家有所帮助。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/655735add2f5e1655d1a4155