es6新语法

es6新语法

let定义变量

  • let变量不允许重复

  • let定义的变量拥有块级作用域,只能在块中访问

    1
    2
    3
    4
    for(let i = 0; i < 5; i++) {
    console.log(i);
    }
    console.log(i);
  • 没有预解析,没有变量提升

    1
    2
    console.log(i);
    let i = 10;
  • 暂时性死区,就是如果一个作用域中已经存在了某变量,那么你就不能在这个变量的前面使用它,即使上级作用域中含有这个变量也不行,这就是暂时性死区

    1
    2
    3
    4
    {
    console.log(i);
    let i = 10;
    }
  • 全局变量不再是window属性

    1
    2
    let i = 5;
    console.log(window.i);

const定义常量

  • 不允许重复声明

    1
    2
    3
    // SyntaxError,在语法分析时就报错
    let a = 10;
    let a = 20;
    1
    2
    3
    4
    function fn(arg) {
    let arg;
    }
    fn(10); // SyntaxError
  • 块级作用域

    1
    2
    3
    4
    5
    {
    let a = 10;
    console.log(a); // 10
    }
    console.log(a); // ReferenceError
  • 没有预解析

    1
    2
    console.log(a); // ReferenceError
    let a = 10;
  • 存在暂时性死区

    • 即在某作用域内如果存在let、const声明的变量常量,

    • 如果在声明前使用它们就报错,也不会从上级作用域中查找。

      1
      2
      3
      4
      5
      let a = 10;
      {
      console.log(a); // ReferenceError
      let a = 20;
      }
  • 全局变量不再是window属性

    1
    2
    3
    let a 10;
    console.log(a); // 10
    console.log(window.a); // undefined
  • const定义常量时必须一起赋值

    1
    const NAME; // SyntaxError;
  • 常量的值不允许修改

    1
    2
    const NAME = '哈哈哈';
    NAME = '嘻嘻嘻'; // TypeError

解构赋值

按照一定的模式,从数组和对象中提取值,然后对变量进行赋值

数组解构

  • 完全解构

    1
    2
    3
    4
    5
    let arr = [10, 20, 30];
    let [ a, b, c ] = arr;
    console.log(a); // 10
    console.log(b); // 20
    console.log(c); // 30
  • 部分解构

    1
    2
    3
    let [ a, , c ] = [10, 20, 30];
    console.log(a); // 10
    console.log(c); // 30
  • 特殊值

    1
    2
    3
    4
    let [ a, b, c ] = [10, [ 20, 21, 22 ], {a: 1, b: 2}];
    console.log(a); // 10
    console.log(b); // [ 20, 21, 22 ]
    console.log(c); // {a: 1, b: 2}
  • 深层解构

    1
    2
    3
    4
    let [ a, [b1, b2] ] = [10, [ 20, 21, 22 ], 30];
    console.log(a); // 10
    console.log(b1); // 20
    console.log(b2); // 21
  • 解构缺失

    1
    2
    3
    let [ a, b ] = [10];
    console.log(a); // 10
    console.log(b); // undefined
  • 默认值

    1
    2
    3
    let [ a = 'aa', b = 'bb' ] = [10];
    console.log(a); // 10
    console.log(b); // bb