ES6重点小结

let & const

let和const是ES6新增的指令。
块级作用域-仅在所在的代码块内有效。
不存在变量提升-变量仅在声明语句之后才可以使用。
暂时性死区(temporal dead zone, TDZ)-在代码块内,使用let命令声明变量之前,该变量都是不可用的。
不允许重复声明-在相同作用域内,重复声明同一个变量会报错。
const声明一个只读常量,必须在声明时赋值,赋值后该常量不可改变。

变量的解构赋值

  1. 数组的解构赋值
    只要等号两边的模式相同,左边的变量就会被赋予对应的值:
    var [a, b, c] = [1, 2, 3];    //a = 1, b = 2, c = 3  
    var [a, [[b], c]] = [1, [[2], 3]];    //a = 1, b = 2, c = 3  
    var [a, ... b] = [1, 2, 3, 4];        // a = 1, b = [2, 3, 4]
    
    如果解构不成功,变量的值等于undefined:
    var [a] = [];
    var [a] = 1;
    var [a] = 's';
    ...
    
    对undefined/null解构会报错(解构只能用于数组或对象):
    var [a] = undefined;
    var [a] = null;
    
    解构赋值允许指定默认值:
    var [a = 'b'] = [];    //a = 'b';
    
    除var外,解构赋值也适用于let/const。
  2. 对象的赋值解构
    对象的解构与数组有一个重要的不同-数组元素按次序排列,变量的取值由其位置决定。对象的属性没有次序,变量必须与属性同名才能取到正确的值。

    var {bar, foo} = {foo: 'aaa', bar: 'bbb'};
    console.log(bar); //aaa
    console.log(foo); //bbb
    
    var {baz} = {foo: 'aaa'};
    console.log(baz); //undefined
    

    变量与属性名不一致的赋值方式:

    var {foo: baz} = {foo: 'aaa'};
    console.log(baz); //aaa
    

    对象的嵌套解构:

    var o = {
     p: [
       'Hello',
       {y: 'World'}
     ]
    };
    var {p: [x, {y}]} = o;
    console.log(x); //Hello
    console.log(y); //World
    

字符串的扩展

  1. ES6新提供了三种方法判断某字符串是否包含在另一个字符串中:
    boolean contains(string [, beginIndex]);
    boolean startsWith(string [, beginIndex]);
    boolean endsWith(string [, beginLength]);
    
    前两个函数中的第二个参数均表示开始位置,endsWith中的beginLength表示查看前n个字符:
    "abc".endsWith("bc");  //true
    "abc".endsWith("bc", 2);  //false
    "abc".endsWith("ab", 2);  //true
    
  2. repeat(n):返回一个新字符串,该字符串将原字符串返回n次:
    let b = "a".repeat(3);
    console.log(b); //"aaa";
    
  3. 模板字符串(template string)-用反引号(`)标志,用三种作用:
    i. 同单引号”‘“一样,用于定义普通字符串
    let a = `ddd`;
    console.log(a); //ddd
    
    ii. 用于定义多行字符串
    let a = `ab
    c`;
    console.log(a); //ab(换行)c
    
    iii. 定义模板
    let name = "Alex";
    let t = `hello ${name}`
    console.log(t);  //hello Alex
    
    这里需要注意的是模板并不会随变量内容的改变而改变:
    let name = "Alex";
    let t = `hello ${name}`;
    console.log(t);  //hello Alex
    name = 'John';
    console.log(t);  //hello Alex
    
    且在使用前要预先定义好该变量:
    let t = `hello ${undefinedVar}`;  //Uncaught ReferenceError: undefinedVar is not defined
    

数值的扩展