ECMAScript 6 的解构赋值是怎么回事

查看更多文章: https://alili.tech

学习解构赋值的时候,我想到了以前的一道题:

a,b 两个变量,不用第三个变量来切换两个变量的值

var a = 10,
    b = 20;
    a = {
        a: a,
        b: b
    };
    b = a.a;
    a = a.b;

    console.log(a) //20
    console.log(b) //10
var a = 10,
    b = 20;
    a = [a,b]
    b = a[0];
    a = a[1];

    console.log(a) //20
    console.log(b) //10

也有奇淫技巧

var a = 10,
    b = 20;
    a=[b,b=a][0];

    console.log(a) //20
    console.log(b) //10

今天学到了解构赋值,那方法就更简单清晰了

var a=10;
var b=20;
    [a,b]=[b,a];
    console.log(a) //20
    console.log(b) //10

怎么样,是不是很神奇?

数组的解构赋值

什么是解构赋值?

以前我们赋值变量是这样子的:

var foo1 =1;
var foo2 =2;
var foo3 =3;

console.log(foo1); //1
console.log(foo2); //2
console.log(foo3); //3

在es6中我们可以这样:

var [foo1,foo2,foo3]=[1,2,3]

console.log(foo1); //1
console.log(foo2); //2
console.log(foo3); //3

注意:左右两边格式一定要一样


那如果我只想赋值一部分变量呢?

var [,,foo3]=[1,2,3]

console.log(foo3); //3
var [,foo2,]=[1,2,3]

console.log(foo2); //2

如果相对应的位置没有值,比如说这样:

var [foo1,foo2,foo3]=[1,2]

console.log(foo1); //1
console.log(foo2); //2
console.log(foo3); //undefined
var [foo1,foo2]=[1,2,3]

console.log(foo1); //1
console.log(foo2); //2

支持 rest参数,也就是剩余参数. 符号为 …:

var [foo1,...foo2]=[1,2,3,4,5]

console.log(foo1); //1
console.log(foo2); //[2,3,4,5]

注意: 如果在rest参数的后面再写一个参数是会报错的:

var [foo1,...foo2,foo3]=[1,2,3,4,5] //报错


对象的解构赋值

对象的解构赋值与数组结构赋值非常相似

以前我们取对象属性下的值是这样子的:

  var obj={
    foo1:1,
    foo2:2,
    foo3:3,
  }
  var foo1=obj.foo1; //1
  var foo2=obj.foo2; //2
  var foo3=obj.foo3; //3

解构赋值:

  var obj={
    foo1:1,
    foo2:2,
    foo3:3,
  }
  var {foo1,foo2,foo3}=obj;
  console.log(foo1); //1
  console.log(foo2); //2
  console.log(foo3); //3

只要在左边写上相对应的属性名称,就可以赋值给一个与属性名相同的变量;


如果变量名不想取一个跟属性名一样的,该怎么办?

  var obj={
    foo1:1,
    foo2:2,
    foo3:3,
  }
  var {foo1:bar1,foo2:bar2,foo3:bar3}=obj;
  console.log(bar1); //1
  console.log(bar2); //2
  console.log(bar3); //3

如果没有相对应的属性名,也会是undefined

  var obj={
    foo1:1,
  }
  var {foo1,foo2}=obj;
  console.log(foo1); //1
  console.log(foo2); //undefined

公众号“ Alili丶前端大爆炸”,关注后提供海量学习资料

图 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值