拓展运算符
拓展运算符(Spread Operator)是ES6中引入的新特性,以下是关于它的一些知识点总结:
语法
拓展运算符的语法是三个点(...),它可以将数组或对象展开成多个元素或属性。
数组中的应用
• 数组展开:可以将一个数组展开成一系列独立的元素,用于函数调用、数组字面量等场景。例如,console.log(...[1, 2, 3])会输出1 2 3。
• 数组合并:通过拓展运算符可以方便地合并多个数组。如const arr1 = [1, 2]; const arr2 = [3, 4]; const mergedArr = [...arr1, ...arr2];,mergedArr就是[1, 2, 3, 4]。
• 数组复制:可以利用拓展运算符浅拷贝数组。const arr = [1, 2, 3]; const copiedArr = [...arr];,copiedArr是arr的浅拷贝。
对象中的应用
• 对象属性展开:将一个对象的属性展开到另一个对象中。例如,const obj1 = {a: 1, b: 2}; const obj2 = {...obj1, c: 3};,obj2就是{a: 1, b: 2, c: 3}。
• 对象合并:用于合并多个对象,后面的对象属性会覆盖前面相同属性的对象。如const obj3 = {d: 4}; const mergedObj = {...obj1, ...obj3};,mergedObj为{a: 1, b: 2, d: 4}。
函数参数中的应用
• 可变参数列表:在函数定义中,使用拓展运算符可以将传递进来的参数收集为一个数组。例如,function sum(...nums) { return nums.reduce((acc, num) => acc + num, 0); },可以接受任意数量的参数并求和。
注意事项
• 拓展运算符只能用于可迭代对象,如数组、字符串、Map、Set等,对于普通对象需要使用Object.entries()等方法转换后才能使用。
• 它执行的是浅拷贝,对于对象和数组中的引用类型,拷贝的是引用,而不是实际的值。