ES6解构赋值

数组的解构赋值

数组的解构赋值需要左边的变量结构需要等于右边的值的结构,即给对应位置的变量声明对应位置的值,变量的取值由位置决定

只要某种数据类型具有迭代器(iterator)接口,就可以使用数组的解构赋值,不一定非是数组

es6中具有iterator接口的数据类型有:数组,类数组对象,字符串,Set,Map,Generator函数

注:对象不具有iterator接口,需要自己配置

var [a,b,c] = ['a','b'];
console.log(a); //a
console.log(b); //b

var [a,[[b],c]] = [1,[[2],3]];
console.log(a); //1
console.log(b); //2
console.log(c); //3

//不完全解构,左边只是右边的一部分,但是模式是正确的
var [a,,c] = ['a1','b1','c1','d1'];
console.log(a); //a1
console.log(c); //c1

var [a,...b] = ['a2','b2','c2','d2']; 
//rest参数:...b 获取多余的数组元素,组成一个新数组,常用于函数参数中,作用与arguments类似,arguments是类数组
console.log(a); //a2
console.log(b); //['b2','c2','d2']

var [a,b,...c] = ['a3'];
//rest参数必须是最后一个元素
console.log(a); //a3
console.log(b); //undefined 解构不成功就是undefined
console.log(c); //[] rest参数解构不成功是空数组[]

//字符串具有iterator接口
var [a,b,c] = 'hello';
console.log(a); //h
console.log(b); //e
console.log(c); //l

var [a,b,c] = new Set(['aa','bb','cc']);
console.log(a); //aa
console.log(b); //bb
console.log(c); //cc

对象的解构赋值

对象的属性没有次序,变量必须与属性同名,才能取到正确的值,即变量名与属性名一一对应,次序不重要

var {foo,bar} = {bar: 'aaa', foo: 'bbb'}
console.log(foo); //bbb
console.log(bar); //aaa

var {foo} = {baz: 'ccc'}
console.log(foo); //undefined 因为变量与属性名不一致
//解决办法
//在变量前指定对应的属性名使用:隔开
var {baz:foo} = {baz: 'ddd'}
console.log(foo); //ddd  foo指向baz属性对应的值

//还可以用于嵌套结构对象, 不过应该很少会这么做吧。。。
var obj = {
  p: [
    'Gary',
    {
      y: 'Guo'
    }
  ]
}

var {
  p: [
    x,
    {
      y
    }
  ]
} = obj;

console.log(x); //Gary
console.log(y); //Guo


如果是先声明了变量再进行对象解构赋值则需要加上括号,否则js回你认为{}是一个代码块,而不是解构赋值

var bar;
{bar} = {bar:1} //SyntaxError: expected expression, got '='
console.log(bar);

var bar;
({bar} = {bar:111})
console.log(bar);  //111 实际开发中不推荐这么做

对象解构赋值的小应用:求最大值

//正常方法
var arr = [2,5,1,8,4,2];
console.log(Math.max.apply(this, arr)); //8

//简化

var {max} = Math;
console.log(max.apply(this, arr)); //8

即是将现有方法赋值到变量上使用



ES6解构赋值的好处有以下几点: 1. 简化代码:ES6解构赋值可以让我们更简洁地从数组或对象中提取值,并将其赋给变量。这样可以减少冗余的代码,使代码更加简洁易读。 2. 提高可读性:通过使用解构赋值,我们可以清晰地表达出我们想要提取的值的含义,使代码更易于理解和维护。 3. 方便的交换变量值:使用解构赋值可以方便地交换两个变量的值,而不需要使用额外的中间变量。 4. 快速提取对象属性:解构赋值可以快速提取对象中的属性,并将其赋给变量。这样可以方便地访问和操作对象的属性。 5. 函数参数的灵活应用:解构赋值可以用于函数的参数中,可以方便地从传入的对象或数组中提取所需的值,使函数的参数更加灵活。 6. 处理JSON数据:解构赋值可以方便地从JSON数据中提取所需的值,使得处理JSON数据更加方便快捷。 7. 支持默认值:解构赋值可以为变量设置默认值,当提取的值不存在时,可以使用默认值来代替,避免出现undefined的情况。 8. 多层嵌套解构:ES6解构赋值支持多层嵌套的解构,可以方便地从复杂的数据结构中提取所需的值。 9. 可以与扩展运算符结合使用:解构赋值可以与扩展运算符(...)结合使用,可以方便地提取数组或对象中的部分值,并将其与其他值合并或进行其他操作。 总之,ES6解构赋值可以使我们的代码更加简洁、可读性更高,并且提供了更多的灵活性和便利性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值