解构赋值是对赋值运算符的扩展;目前用在数组和对象上,主要利用各自的数据结构特点,方便地将源对象的数据赋值给对应的目标变量;它可以有多种使用形式:
1,用在数组:
//数组的特点之一就是数组是个有顺序的列表;不管元素的大小排列,它总是按下标从小到大(从0到数组的length-1)---
//所以按顺序; 2 被赋值给a, 4被赋值给b;
//a 和 b是全局变量;
let [a, b] = [2, 4]; //解构赋值的便利;
console.log(a, b);
//2 4
//相当于:
// let a, b;
// [a, b] = [2, 4];
// console.log(a, b);
// //2 4
//可以填过不需要的元素-------
let[c, ,d] = [2, 5, 9];
console.log(c, d);
//2 9
//可以使用剩余运算,将剩下的元素集合在一个数组中---------------
//剩余运算符应该使用在最后一个变量
let[e, ...rest] = [4, 6, 9, 1, 0];
console.log(e, rest);
//4 [6, 9, 1, 0]
//可以使用默认值------------------------------
//undefined不同于null;undefined会被认为是没有赋值;
let[g = 9, h = 5, o, j = h] = [4, undefined, null];
console.log(g, h, o, j);
//4 5 null 5
2,用在对象:跟用在数组类似
//对象的特点之一是每个对象都有唯一的键名;
var obj = {a: 'hello', b: 'hi', c: 'test', d: {e: 'hola'}};
//可以跳过不需要的属性----------
let{a, b} = obj
console.log(a, b);
//'hello' 'hi'
//可以使用剩余运算符-------------
let{c, ...rest} = obj;
console.log(c, rest);
//'test' {a: "hello", b: "hi", d: {e: 'hola'}}
//可以重命名----------
let{d: dd, d:{e}} = obj;
// console.log(d);//被重命名的属性名不会被声明,因此不能使用--------------
// //Uncaught ReferenceError: d is not defined
//第二个d(d:{e})只是用来标明哪个属性,它不会做声明,即不会声明变量d---------------------
console.log(dd, e);
//{e: "hola"} "hola"
//当没有与之对应的属性名,不会报错-------------
let {m} = obj;
console.log(m);
//undefined
//可以有默认值,当没有与之对象的属性名时或属性值未undefined时,变量可以给默认值--------------
let{n = 67} = obj;
console.log(n);
//67
3,参考文档: