解构赋值
ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)
数组解构赋值
let [a, b, c] = [1, 2, 3];// a = 1 b = 2 c = 3
可嵌套
let [a, [[b], c]] = [1, [[2], 3]];// a = 1 b = 2 c = 3
可忽略
let [a, , b] = [1, 2, 3];// a = 1 b = 3
不完全解构
let [a = 1, b] = []; // a = 1, b = undefined
剩余运算符
let [a, ...b] = [1, 2, 3];//a = 1 b = [2, 3]
字符串等
在数组的解构中,解构的目标若为可遍历对象,皆可进行解构赋值。可遍历对象即实现 Iterator 接口的数据。
let [a, b, c, d, e] = 'hello';// a = 'h' b = 'e' c = 'l' d = 'l' e = 'o'
解构默认值
当解构模式有匹配结果,且匹配结果是 undefined 时,会触发默认值作为返回结果。
let [a = 2] = [undefined]; // a = 2
let {length} = [1,2,3,4,10]; //length = 5
对象解构赋值
对象的解构与数组有一个重要的不同。数组的元素是按次序排列的,
变量的取值由它的位置决定;而对象的属性没有次序,
变量必须与属性同名,才能取到正确的值。
let { a, b} = { a: 'aaa', b: 'bbb' };// a= 'aaa' b= 'bbb'
let { c: d} = { c: 'ddd' }; // d= 'ddd'
对象的解构也可以指定默认值
var {x = 3} = {}; //x =3
var {x, y = 5} = {x: 1}; //x = 1, y= 5
可嵌套可忽略
应用
交换变量的值
let x = 1;
let y = 2;
[x, y] = [y, x];
从函数返回多个值
函数只能返回一个值,如果要返回多个值,只能将它们放在数组或对象里返回。
有了解构赋值,取出这些值就非常方便。
//返回一个数组
function example() {
return [1, 2, 3];
}
let [a, b, c] = example();
// 返回一个对象
function example() {
return {
foo: 1,
bar: 2
};
}
let { foo, bar } = example();
…运算符(扩展运算符)
起到参数收集作用
- 收集符只能出现一次
- 一个函数,剩余参数收集只能在最后一个形参
function sum(a,b,...arg){ //收集参数只能放在最后一个参数
console.log(a,b,arg)
}
sum(1,2,3,4,5)
运用在数组中,函数中
let arr = [1,2,3];
console.log(...arr); //1 2 3
let arr2 = [4,5,6];
let newArr = [...arr,...arr2];
console.log(newArr) //[1,2,3,4,5,6]