扩展运算符
...是扩展运算符。凡是有遍历器接口的数据都可以用扩展运算符展开参与运算。
用法:
类型转换:
字符串转数组:
let s = 'abc';
let arr = [...s];
console.log(arr);//['a','b','c']
字符串转数组:
let s = 'abc';
let arr = { ...s };
console.log(arr);//{0: 'a', 1: 'b', 2: 'c'}
字符串的解构和数组类似,没有名称只有索引值,因此转对象时,索引值就作为对象的值和名称。
数组转字符串:
let arr = [1, 2, 3, 4, 5];
let s = ''.concat(arr)
console.log(s);//'1,2,3,4,5'
concat方法要求参数是字符串类型,因此,会将数组转化为字符串合并到空字符串中。
let arr = [1, 2, 3, 4, 5];
let s = ''.concat(...arr)
console.log(s);//'12345'
扩展运算符会将数组中的每一项都作为concat的参数。
数组转对象:
let arr = [1, 2, 3, 4, 5];
let obj = { ...arr }
console.log(obj);//{0: 1, 1: 2, 2: 3, 3: 4, 4: 5}
数组没有名称只有索引值,因此转对象时,索引值就作为对象的值的名称。
对象转字符串或数组
因为对象拥有不止一个遍历器接口,所以,不能直接使用扩展运算符转换。
连接
let arr1 = [1,2,3];
let arr2 = [4,5,6];
let arr3 = [...arr1,...arr2];
let obj1 = {a:1,b:2};
let obj2 = {c:3,d:4};
let obj3 = {...obj1,...obj2}
展开数组作为多个参数:
let arr = [1, 2, 3, 5, 6576, 8, 8, 9]
console.log(
Math.max(...arr)
)
结合解构赋值
aa(1,2,3,4,5);
function aa(a,...b){
console.log(b)//[2,3,4,5]
}
集合转数组
let lis = document,querySelectAll('li');
let arr = [...lis];