zoukankan      html  css  js  c++  java
  • 变量的解构赋值

    变量的解构赋值
      数组解构赋值
        前后模式必须匹配
          后面的值是什么格式前面的变量声明就是什么格式
          后面的值是二维数组
          前面声明的变量也得是二维格式
          let [a,b,c] = ["45","56","67"];
          console.log(a,b,c) //45 56 67
        前多后少
          前面声明的变量多,后面赋值的值少,解构不成功,就相当于只声明了变量,但没有赋值,解构不成功的变量值是undefined;
          let [a,b,c] = [12,23]
          console.log(a,b,c) // 12 23 undefine
        前少后多
          省略赋值
          let [ , , c] = [45,56,67];
          console.log(c) //67
          不定参数解构赋值 使用... 叫 扩展运算符
          let [a,d,...c] = [45,56,48,68]
          console.log(c) //48 68
        (扩展运算符要写在最后面)
        带默认值
          先给默认值再解构赋值?还是先解构赋值再给默认值?
          let [x,y = (function(){console.log("你好"); return 10;})()] = [12,23]
          console.log(y)
          没有输出你好,说明不是先给默认值,而是先解构赋值,不再考虑默认值
          所以,就是解构不成功的时候,才会走默认值。解构不成功就是没有定义;
          var a = null a = [] a = {} a = "" 这都叫定义了;
          var a = undefined 这叫没有定义
          所有只有解构的时候,后面是undefined的时候,才会走默认值,否则后面给什么就赋值什么;
          let [a = 12,b] = [[],45];
          console.log(a) //[]
      对象解构赋值
        变量和属性必须同名,才可以解构赋值
        let {name,age} = {name:"王一博",age:22}
        console.log(name)//王一博
        如果解构失败,值是undefined;
        let {name,age} = {age:22};
        console.log(name); //undefined
        如果变量名跟属性名不一致
        let {name:aa,age:bb} = {name:"张三",age:23};
        console.log(aa)//张三
        前面name是属性 ,后面aa是变量,解构的机制,是对应的属性值赋值给后面的变量
      默认值
        默认值跟数组解构的默认值一样,解构成功就直接赋值,解构不成功就是没有值,或者是undefined,就走默认值
          var {x = 3} = {};
          x // 3

          var {x, y = 5} = {x: 1};
          x // 1
          y // 5

          var {x: y = 3} = {};
          y // 3

          var {x: y = 3} = {x: 5};
          y // 5

          var { message: msg = 'Something went wrong' } = {};
          msg // "Something went wrong"

      对象解构赋值的注意点
        {}前面不能没有东西 前面必须带声明变量的关键字
      等号右边在什么情况下能解构?
        等号右边的值只要带有length属性,都可以解构

    字符串的解构赋值
      const [a, b, c, d, e] = 'hello';
      a // "h"
      b // "e"
      c // "l"
      d // "l"
      e // "o"

    函数参数的解构赋值
      函数参数的默认值
      (带默认值的写后面 函数参数 等号左边是参数 右边是默认值 函数调用时不传参,走函数形参的默认值 ,如果传参,默认值就不走了,走实参)

       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]

      function move({x, y} = { x: 0, y: 0 }) {
      return [x, y];
      }
      move({x: 3, y: 8}); // [3, 8]
      move({x: 3}); // [3, undefined]
      move({}); // [undefined, undefined]
      move(); // [0, 0]

    函数作用域
      函数在调用的时候 ,会形成一个私有的作用域,在这个作用域下声明的变量和参数变量都是私有变量,外界访问不到,同时他在
      操作相同的变量时,不会操作外部的;
      形参就是赋值,没有变量提升


    箭头函数
       只适用于匿名函数
      let fn = function(){} 匿名函数
      做回调函数 fn(12,funciton(){})
      匿名函数:只要不是关键字function 声明的函数都叫匿名函数

      let fn = (形参) => {函数体}
      每个函数结束的时候一定要return
      当只有一个 参数时,可以省略小括号()
      当函数体只有一行代码 且 return xxx ;可以省略花括号 let fn = x => x //传一个x return一个x

    箭头函数的优势
      ·箭头函数没有this指向
      (  函数中改变this指向的方法
          1、在函数前提前赋值
          2、在函数的结尾处{}.bind(this)
          3、在函数结尾处{}.apply(this)或者是{}.call(this)
          4、箭头函数 )备注:箭头函数中的this指向当前父级
    箭头函数获取参数 不能使用arguments 用...arg
    箭头函数不能充当类


    函数的角色
        函数可以扮演 类 普通函数 function实例
      类
      每个类身上天生有一个prototype的属性,这个属性是一个对象,里面有一个constructor的属性,属性值是类(函数)本身
      new 实例的时候其实就是调用constrctor函数

    对象
      每个对象天生有一个__proto__的属性,__proto__也是一个对象,这个对象也有一个constructor属性,属性值是他的类

    注意:
      object是所有对象的基类 包括window event等
      普通函数的父类是Function
      通过function定义的类,他的父类是Function
      所有实例对象的__proto__都指向父类的原型prototype

    对象.属性
      首先看对象中私有的属性中有没有这个属性,有就直接用,没有就通过__proto__ 向他的父类的原型(prototype)上查找

  • 相关阅读:
    matlablib安装Helvetica字体
    word插入矢量图的方法
    字体对应关系
    MySQL8.0.15基于mycat读写分离(windows环境)
    2.MySQL8.0.15主从同步(windows环境)
    1.MySQL8.0.15安装步骤(windows环境)
    mysql自带的压力测试工具
    FreeFileSync + Windows任务计划程序 实现自动备份功能
    FreeFileSync 设置服务器文件自动备份,同时可做本地代码程序同步软件
    dokcer镜像添加ssh服务
  • 原文地址:https://www.cnblogs.com/gdqx/p/11153404.html
Copyright © 2011-2022 走看看