...
**扩展运算符(...
)**允许一个表达式在期望多个参数(用于函数调用)或多个元素(用于数字字面量)或多个变量(用于解构赋值)的位置扩展。扩展运算符是ES6中引入的,将可迭代对象展开到其单独的元素中,所谓的可迭代对象就是任何能用for of
循环进行遍历的对象。如:数组(数组常用方法)、字符串、Map、Set、DOM节点等。
使用扩展符拷贝数组是ES6中常用的操作:
const arr_01=[100,200,300,400,'hello']
let arr_02 = [...arr_01]
let arr_03 = arr_01
arr_02.push('E01','E02')
console.log(arr_02) //[100,200,300,400,'hello','E01','E02']
console.log(arr_01) //[100,200,300,400,'hello']
arr_03.push('C01')
console.log(arr_01) //[100,200,300,400,'hello','C01']
扩展运算符拷贝数组,只有第一层是深拷贝,既对一维数组使用扩展符拷贝就属于深拷贝。
合并对象,在合并对象时,如果一个键已经存在,它会被具有相同键的最后一个对象给替换。
const halfMonths1 = [101,102,103,104]
const halfMonths2 = [201,202,203,204]
const halfMonths3 = [...halfMonths1,...halfMonths2] //[101,102,103,104,201,202,203,204]
console.log(halfMonths3)
const sum = (num1,num2)=>num1+num2
console.log(sum(16,17)) //13
console.log(sum(...[16,17])) //13
console.log(sum(...[16,17,18])) //13
从上面的代码看,函数定义了多少个参数,扩展运算符传入的值就是多少个
const param = ['a','b','c','b','b','c']
const param_01 = [...new Set(param)]
console.log(param_01) //['a','b','c']
与Set一起使用消除数组的重复项。
String
也是一个可迭代对象,所以也可以使用扩展运算符...
将其转为字符数组。
const title = 'goyeer'
const arr_title = [...title]
console.log(arr_title)
进而可以简单进行字符串截取。
const title = 'goyeer'
const arr_title = [...title]
arr_title.length = 2
console.log(arr_title.join("")) //go
NodeList
对象是节点的集合,通常是由属性和方法返回的
NodeList
类似于数组,但不是数组,没有Array
的所有方法如:find
、map
、filter
等,但是可以使用 forEach()
来迭代。
const nodelist = document.querySelectorAll(".row")
const nodeArray = [...nodelist]
console.log(nodelist)
console.log(nodeArray)
解构数组,下面演示:
const [first,second,...others] = [100,101,102,103,104]
console.log(first)
console.log(second)
console.log(others)
解构对象,如:
const userInfo = {name:"goyeer",province:"jiangsu",city:"suzhou"}
const {name,..loaction} = userinfo
console.log(name) //goyeer
console.log(location) //{province:"jiangsu",city:"suzhou"}
在打印可迭代对象的时候,需要打印每一项可以使用扩展符:
const years = [2018,2019,2020,2021]
console.log(...years) //2018,2019,2020,2021
扩展运算符...
让代码变的简洁,而且是ES6中非常使用受欢迎的内容