ES6基础

作者: 青争小台 | 来源:发表于2020-06-25 21:26 被阅读0次

    定义

    1. ES6, 全称 ECMAScript 6.0 ,是 JavaScript 的下一个版本标准,2015.06 发版。
    2. ES6 主要是为了解决 ES5 的先天不足,比如 JavaScript 里并没有类的概念

    Let

    • 定义:
      用于声明变量。

    • Let和var的区别:
      1.let 声明的变量只在 let 命令所在的代码块内有效。(代码块指花括号,花括号引起来的就是代码块)var 是在全局范围内有效。
      2.let 只能声明一次 var 可以声明多次。
      3.let 不存在变量提升,var 会变量提升。

    const

    • 定义:
      用于声明变量。
      const 声明一个只读变量,声明之后不允许改变。意味着,一旦声明必须初始化,否则会报错。

    • 基本用法:
      const PI = "3.1415926";

    • 暂时性死区:

      var PI = "a";
      if(true){
        console.log(PI);  // ReferenceError: PI is not   defined
        const PI = "3.1415926";
      }
      
    • 注意:

    ES6 明确规定,代码块内如果存在 let 或者 const,代码块会对这些命令声明的变量从块的开始就形成一个封闭作用域。代码块内,在声明变量 PI 之前使用它会报错。
    const 如何做到变量在声明初始化之后不允许改变的?其实 const 其实保证的不是变量的值不变,而是保证变量指向的内存地址所保存的数据不允许改动。此时,你可能已经想到,简单类型和复合类型保存值的方式是不同的。是的,对于简单类型(数值 number、字符串 string 、布尔值 boolean),值就保存在变量指向的那个内存地址,因此 const 声明的简单类型变量等同于常量。而复杂类型(对象 object,数组 array,函数 function),变量指向的内存地址其实是保存了一个指向实际数据的指针,所以 const 只能保证指针是固定的,至于指针指向的数据结构变不变就无法控制了,所以使用 const 声明复杂类型对象时要慎重。

    解构赋值

    • 定义:
      解构赋值是对赋值运算符的扩展。
      他是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值。
      在代码书写上简洁且易读,语义更加清晰明了;也方便了复杂对象中数据字段获取。

    • 解构模型:
      在解构中,有下面两部分参与:
      解构的源,解构赋值表达式的右边部分。
      解构的目标,解构赋值表达式的左边部分。

    • 数组模型的解构(Array):

      let [a, b, c] = [1, 2, 3];
      // a = 1
      // b = 2
      // c = 3
      

      解构默认值:

      let [a = 2] = [undefined]; // a = 2
      

      当解构模式有匹配结果,且匹配结果是 undefined 时,会触发默认值(2)作为返回结果。

    • 对象模型的解构(Object):

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

      解构默认值

      let {a = 10, b = 5} = {a: 3};
      // a = 3; b = 5;
      let {a: aa = 10, b: bb = 5} = {a: 3};
      // aa = 3; bb = 5;
      

      剩余运算符

      let [a, ...b] = [1, 2, 3];
      //a = 1
      //b = [2, 3]
      

    Symbol

    • 定义:
      ES6 引入了一种新的原始数据类型 Symbol ,表示独一无二的值,最大的用法是用来定义对象的唯一属性名。
      ES6 数据类型除了 Number 、 String 、 Boolean 、 Objec t、 null 和 undefined ,还新增了 Symbol 。

    • 基本用法:
      Symbol 函数栈不能用 new 命令,因为 Symbol 是原始数据类型,不是对象。
      例:

      let sy = Symbol("KK");
      console.log(sy);   // Symbol(KK)
      typeof(sy);        // "symbol"
      // 相同参数 Symbol() 返回的值不相等
      let sy1 = Symbol("kk"); 
      sy === sy1;       // false
      
       //由于每一个 Symbol 的值都是不相等的,所以 Symbol 作为对象的属性名,可以保证属性不重名。
      
      
      let sy = Symbol("key1");
      
      // 写法1
      let syObject = {};
      syObject[sy] = "kk";
      console.log(syObject);    // {Symbol(key1): "kk"}
      
      // 写法2
      let syObject = {
        [sy]: "kk"
      };
      console.log(syObject);    // {Symbol(key1): "kk"}
      //Symbol 作为对象属性名时不能用.运算符,要用  方括号。因为.运算符后面是字符串,所以取到的    是字符串 sy 属性,而不是 Symbol 值 sy 属性。
      

    Map对象

    • 定义:
      Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。
      数据格式(存储数据的方式)有数组,对象,Map也用来存储数据。

    • Maps 和 Objects 的区别:
      一个 Object 的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值。
      Map 中的键值是有序的(FIFO 原则即先入先出原则),而添加到对象中的键则不是。
      Map 的键值对个数可以从 size 属性获取,而 Object 的键值对个数只能手动计算。
      Object 都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突。

    • 基本用法:

      var myMap = new Map();      (实例化一个Map对象)
      var key = "a string"; 
     
      myMap.set(key, "大家好");    (保存数据)
     
      myMap.get(key);    // "和键'a string'关联的值"
      myMap.get("大家好");          (获取数据)
    

    相关文章

      网友评论

          本文标题:ES6基础

          本文链接:https://www.haomeiwen.com/subject/xnqefktx.html