重新学习es6文章2.2

一、 接着介绍:变量的解构赋值

1.数组和对象的结构赋值
2. 数字、字符串和布尔值的结构赋值
3. 函数参数的解构赋值
4. 圆括号问题
5. 结构赋值的用途

  1. 数组和对象的结构赋值
  //es5的写法
       //let a = 5;
       //let b = 6;
      // es6的写法 //数组的结构赋值本质为模式匹配,左边的变量就会被赋予对应的值。模式完全匹配,或者左边   的变量对象右边的值不完全,反之值对应的变量不完全。
      //如果等号的右边不是数组(或者严格地说,不是可遍历的结构,那么将会报错)。
      let [a, b,c] = [5, 6];

      console.log(a, b,c);
    //   let [d]=55555
    //   console.log(a);//Uncaught TypeError: 55555 is not iterable

      //结构赋值允许指定默认值,默认值使用严格相等判断一个位置是否有值
      let [foo=999]=[55555]
      console.log(foo); //999

      //结构赋值允许引用其它解构赋值的变量,但是变量必须已经声明
      let [x = 1, y = x] = [];     // x=1; y=1
      let [x = 1, y = x] = [2];    // x=2; y=2
      let [x = 1, y = x] = [1, 2]; // x=1; y=2
      let [x = y, y = 1] = [];     // ReferenceError: y is not defined
    //对象的结构赋值
      let { a, b } = { a: "yz", b: "18" };
      console.log(a, b);
      //变量名和属性名相同
      let { foo, bar } = { foo: "199", bar: "996" };
      console.log(foo, bar);
      //变量名和属性名不同 ,,对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被  赋值的是后者,而不是前者
      let { xx: f, gg: n } = { xx: "66", gg: "55" };
      console.log(f, n);
      //对象的嵌套结构赋值
      let obj = {
        p: ["Hello", { y: "World" }],
      };

      let {
        p: [x, { y }],
      } = obj;
      x; // "Hello"
      y; // "World"

2.数字,字符串,布尔值的结构赋值:

const [a, b, c, d, e] = 'hello';
a // "h"
b // "e"
c // "l"
d // "l"
e // "o"

let {length : len} = 'hello';
len // 5

在对数字和布尔值解构赋值时,如果等号右边是数值和布尔值,则会先转为对象。

let {toString: s} = 123;
s === Number.prototype.toString // true
let {toString: s} = true;
s === Boolean.prototype.toString // true

3.函数参数的结构赋值

 function add([x, y]) {
        return x + y;
      }
      add([1, 2]); // 3

function move({x = 0, y = 0} = {}) {
  return [x, y];
}

move({x: 3, y: 8}); // [3, 8]
move({x: 3}); // [3, 0]
move({}); // [0, 0]
move(); // [0, 0]
  1. 赋值结构的用途
  //交换变量的值
      let x = 1;
      let y = 2;
      [x, y] = [y, x];
      //    函数只能返回一个值,如果要返回多个值,只能将它们放在数组或对象里返回。有了解构赋值,取出这些值就非常方便。
      function example() {
        return [1, 2, 3];
      }
      let [a, b, c] = example();
      // 参数是一组有次序的值
      function f([x, y, z]) {}
      f([1, 2, 3]);

      // 参数是一组无次序的值
      function f({ x, y, z }) {}
      f({ z: 3, y: 2, x: 1 });
      let jsonData = {
        id: 42,
        status: "OK",
        data: [867, 5309],
      };
      let { id, status, data: number } = jsonData;
      console.log(id, status, number);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值