ES6 解构赋值

Posted badaozongcai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES6 解构赋值相关的知识,希望对你有一定的参考价值。

解构赋值是对赋值运算符的扩展。

他是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值。

在代码书写上简洁且易读,语义更加清晰明了;也方便了复杂对象中数据字段获取。

基本用法:

let [a, b, c] = [1, 2, 3];
// a = 1
// b = 2
// c = 3

1、可以嵌套

let [a, [[b], c]] = [1, [[2], 3]];
// a = 1
// b = 2
// c = 3

2、可以忽略

let [a, , b] = [1, 2, 3];
// a = 1
// b = 3

3、不完全解构

let [a = 1, b] = []; // a = 1, b = undefined

4、剩余运算符

let [a, ...b] = [1, 2, 3];
//a = 1
//b = [2, 3]

5、字符串等

在数组的解构中,解构的目标若为可遍历对象,皆可进行解构赋值。可遍历对象即实现 Iterator 接口的数据。

let [a, b, c, d, e] = ‘hello‘;
// a = ‘h‘
// b = ‘e‘
// c = ‘l‘
// d = ‘l‘
// e = ‘o‘

6、解构默认值

let [a = 2] = [undefined]; // a = 2

7、当解构模式有匹配结果,且匹配结果是 undefined 时,会触发默认值作为返回结果。

let [a = 3, b = a] = [];     // a = 3, b = 3
let [a = 3, b = a] = [1];    // a = 1, b = 1
let [a = 3, b = a] = [1, 2]; // a = 1, b = 2

a 与 b 匹配结果为 undefined ,触发默认值:a = 3; b = a =3

a 正常解构赋值,匹配结果:a = 1,b 匹配结果 undefined ,触发默认值:b = a =1

 

a 与 b 正常解构赋值,匹配结果:a = 1,b = 2

对象模型的解构(Object)

基本

let { foo, bar } = { foo: ‘aaa‘, bar: ‘bbb‘ };
// foo = ‘aaa‘
// bar = ‘bbb‘
 
let { baz : foo } = { baz : ‘ddd‘ };
// foo = ‘ddd‘

可嵌套可忽略

let obj = {p: [‘hello‘, {y: ‘world‘}] };
let {p: [x, { y }] } = obj;
// x = ‘hello‘
// y = ‘world‘
let obj = {p: [‘hello‘, {y: ‘world‘}] };
let {p: [x, {  }] } = obj;
// x = ‘hello‘
//y报错

不完全解构

let obj = {p: [{y: ‘world‘}] };
let {p: [{ y }, x ] } = obj;
// x = undefined
// y = ‘world‘

剩余运算符

let {a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40};
// a = 10
// b = 20
// rest = {c: 30, d: 40}

解构默认值

let {a = 10, b = 5} = {a: 3};
// a = 3; b = 5;
let {a: aa = 10, b: bb = 5} = {a: 3};
// aa = 3; bb = 5;

注意:

很多初学者都很难理解的问题是左边是数组/对象,右边也是数组/对象,是怎么进行匹配的呢?

其实这是对解构赋值一个非常大的误解。解构赋值的本质是模式匹配——只要等号两边的模式相同,左边的变量就会被赋予对应的值
所以表达式的左边并不是数组/对象,而是变量的集合,只不过它的模式要与数组/对象相对应,这里要特别强调的是对象的模式匹配还要保持键名【key】相同

 技术图片

 

 

 那么现在我们就可以重新定义一下解构赋值了:把一些东西解放出来【解构】,按照模式匹配对应地赋值给其它变量

当然,上述示例适合于普通的变量声明,工作中我们会遇到许多特殊情况,这就需要解构赋值的特殊用法了

以上内容转载菜鸟驿站和作者:前端前进指南 地址:https://segmentfault.com/a/1190000016182444

以上是关于ES6 解构赋值的主要内容,如果未能解决你的问题,请参考以下文章

ES6-----学习系列二(解构赋值)

阮一峰老师的ES6入门:变量的解构赋值

ES6 之 解构赋值

ES6数组的解构赋值( 下)

Es6 新增解构赋值

ES6学习 第二章 变量的解构赋值