• ES6 (总结篇一)


    一.let

    1.不存在变量提升。

     var 定义变量时候会有变量提升现象,即变量可以在声明前使用,值为undefined,let改变这种现象,let声明的变量一定要在声明后使用,否则报错。

    2.暂时性死区

     在代码块内,使用let声明变量之前,这个变量都是不可以使用的,这就叫做暂时性死区(TDZ),这也意味着,typeof检测类型不再是百分百正确,这里注意:如果typeof x;let x 这样会报错,但是typeof x结果是undefined,也就是没有let之前typeof运算符是百分百正确。

    3.不允许重复声明

      let不允许在相同作用域内,重复声明同一个变量,同理,不能在函数内部重新声明参数

    二.块级作用域

    1.为了解决①.内层变量可能会覆盖外层变量 ②.用来计数的循环变量泄露为全局变量。只在使用大括号的情况下成立,如果没有大括号就会报错!  

    2.块级作用域与函数声明

      ES5规定函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域声明

      ES6引入块级作用域,明确允许在块级作用域中可以声明函数,并且针对ES6的浏览器有以下几条规则:①.允许在块级作用域内声明函数,②.函数声明类似于var,即会提升到全局作用域或函数作用域的头部③,同时,函数声明还会提升到所在的块级作用域的头部

    3.do表达式

     块级作用域是一个语句,将多个操作封装在一起,没有返回值,但是使用do表达式之后,可以得到返回值  

    let x = do{
    let t = f();
    t*t+1
    } 变量x会得到t*t+1

    三.const命令

      const声明一个只读的常量,一旦声明,常量的值就不能改变,如果要改变则会报错;作用域和let一样:只在声明所在的块级作用域有效;也是不存在变量提升;存在暂时性死区;不可重复声明。

    四.解构赋值

    1.解构赋值不得使用圆括号的情况:①.变量声明的语句 ②.函数参数 ③.赋值语句的模式

      可以使用圆括号的情况只有一种:赋值语句的非模式部分,可以使用圆括号

    ({ p: (d) } = {}); 
    //p是模式,d不是模式,所以这个是对的
    ({ p: a }) = { p: 42 }; // 是错的

    2.用途

    (1).交换变量的值

    let x = 1;
    let y = 2;
    [x, y] = [y, x];
    

    (2).从函数返回多个值(函数只能返回一个值,用解构赋值,将他们放在数组或对象里面返回就可以返回多个值)

    function example(){
        return [1,2,3]
    }
    let [a,b,c] = example   //返回一个数组
    
    function example(){
         return {
            foo:1,
            bar:2
        };
    }
        let { foo,bar } = example() //返回一个对象
                        

    (3).函数参数的定义

      解构赋值可以方便的将一组参数与变量名对应起来

        function f([x,y,z]){...}
        f([1,2,3]) //参数是一组有序的值(参数是数组,有序)
    
        function f({x,y,z}){...}
        f({z:3,y:2,x:1}) //参数是一组无序的值(参数是对象,无序)

    (4).提取JSON数据

    let jsonData = {
      id: 42,
      status: "OK",
      data: [867, 5309]
    };
    
    let { id, status, data: number } = jsonData;
    
    console.log(id, status, number);

    (5)遍历map

    const map = new Map();
    map.set('first', 'hello');
    map.set('second', 'world');
    
    for (let [key, value] of map) {
      console.log(key + " is " + value);
    }
    // first is hello
    // second is world

    如果只想获取键名,或者只想获取键值,可以写成下面这样。

    // 获取键名
    for (let [key] of map) {
      // ...
    }
    
    // 获取键值
    for (let [,value] of map) {
      // ...
    }

      

  • 相关阅读:
    Database mirroring connection error 4 'An error occurred while receiving data: '10054(An existing connection was forcibly closed by the remote host.)
    [转载]——Automatic Tuning of Undo_retention Causes Space Problems (文档 ID 420525.1)
    [转载]——Full UNDO Tablespace In 10gR2 and above (文档 ID 413732.1)
    SQL Server Agent作业执行CmdExec(bat)命令报权限问题
    SQL Server有意思的数据类型隐式转换问题
    pymssql的Connection相关特性浅析
    pymssql默认关闭自动模式开启事务行为浅析
    Azure上MySQL的离线备份:将备份拷贝到Azure Blob上
    crontab中部署Python脚本注意事项
    TypeError: expected string or bytes-like object
  • 原文地址:https://www.cnblogs.com/alhh/p/8243257.html
Copyright © 2020-2023  润新知