zoukankan      html  css  js  c++  java
  • ES6学习笔记1-解构赋值

    一、对象的解构赋值

    1.一般模式(简写)

    let {aaa, bbb} = {aaa: 'aaa', bbb: 'bbb'};
    
    //aaa = 'aaa'
    //bbb = 'bbb'
    

    2.原始模式 (复杂)

    let {aaa: a, bbb: b} = {aaa: 'aaa', bbb: 'bbb'}
    
    //a= 'aaa'
    //b= 'bbb'
    

    3.赋值原理

    对象的解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。真正被赋值的是后者,而不是前者。

    4.注意

    let x;
    {x} = {x : 'aaa'} 
    //会报错,因为{x}写在最左边,js会将它当作代码块执行,而不会当作解构赋值。
    ({x} = {x : 'aaa'} )
    //加上小括号,让他不是在最左边即可
    

    二、字符串的解构赋值

    //将字符串当作特殊的数组形式进行解构赋值
    let {a,b,c,d,e} = {'hello'};
    //a = 'h'
    //b = 'e'
    //c = 'l'
    //d = 'l'
    //e = 'o'
    
    let {length: len} = {'hello'}
    //len = 5
    

    三、其他类型的解构赋值(数值,布尔值)

    原则就是将其他类型的值先转换为对象,再进行解构赋值,undefined和null因无法进行转换而报错

    四、函数参数的解构赋值(前方高能!!!)

    1. function test ([x, y]) {
        return x + y;
    }
    
    test([1, 2]);    //3
    //这个没毛病,参数是个数组,函数内对数组元素x, y进行相加操作,继续往下看
    2. function test({x= 0, y= 0}= {}) {
        return [x, y];
    }
    
    test({x: 1, y: 2});    //[1, 2]
    test({x: 1});    //[1, 0]
    test({});    //[0, 0]
    test();    //[0, 0]
    
    //问题1:{x= 0, y= 0}这是什么鬼,对象还可以这么定义吗?
    //答:对象的解构赋值的默认值就是这样的形式设置的,x,y的默认值都设置为0
    //问题2:传实参{x: 1, y: 2},是怎么把实参赋值给形参的?
    //答:实参通过传递引用传递给形参,过程为{x=0,y=0} = {} = {x: 1, y:2}
    //已经懵逼了吗,没关系,继续往下看,这根本不算什么
    
    3.  function test({x, y}= {x: 0, y: 0}) {
        return [x, y];
    }
    
    test({x: 1, y: 2});    //[1, 2]
    test({x: 1});    //[1, undefined]
    test({});    //[undefined, undefined]
    test();    //[0, 0]
    //这个例子和上面例子的不同之处就在于函数形参默认值的设置方式
    //这个例子是给{x, y}形参设置默认值的,上个例子是个{x,y}里的x和y设置值得
    //形参传递进来是的赋值过程为:{x, y} = {x:0, y: 0} = {};
    

    五、解构赋值中圆括号的问题

    • 1、不可以使用圆括号的情况
      • (1)变量声明语句
        let ({x}) = [1];
      • (2)函数参数(也属于声明)
        function (({x}={x: 1})) {};
      • (3)赋值语句的模式(键值对中的键就是模式)
        ([a]) = [5];
    • 2、可以使用圆括号的情况:首先都是赋值语句,而不是声明语句;其次它们的圆括号都不属于模式的一部分。
      [(b)] = [3];
  • 相关阅读:
    Hibernate常用查询
    Hibernate多对多
    Hibernate简单检索方式(查询方式)
    Hibernate入门代码
    Hibernate一对多
    什么是Hibernate
    SpirngMVC入门第一天
    Docker一键部署Hadoop心得(二)
    Docker一键部署Hadoop心得(一)
    安装Docker的三种方式
  • 原文地址:https://www.cnblogs.com/dagaoxiaozheng/p/7442909.html
Copyright © 2011-2022 走看看