ES6重点小结

let & const

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

变量的解构赋值

  1. 数组的解构赋值
    只要等号两边的模式相同,左边的变量就会被赋予对应的值:

    1
    2
    3
    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:

    1
    2
    3
    4
    var [a] = [];
    var [a] = 1;
    var [a] = 's';
    ...

    对undefined/null解构会报错(解构只能用于数组或对象):

    1
    2
    3
    4
    5
    6
    var [a] = undefined;
    var [a] = null;
    ```
    解构赋值允许指定默认值:
    ```javascript

    var [a = 'b'] = []; //a = 'b';

    除var外,解构赋值也适用于let/const。

  2. 对象的赋值解构
    对象的解构与数组有一个重要的不同-数组元素按次序排列,变量的取值由其位置决定。对象的属性没有次序,变量必须与属性同名才能取到正确的值。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var {bar, foo} = {foo: 'aaa', bar: 'bbb'};
    console.log(bar); //aaa
    console.log(foo); //bbb

    var {baz} = {foo: 'aaa'};
    console.log(baz); //undefined
    ```
    变量与属性名不一致的赋值方式:
    ```javascript

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

    对象的嵌套解构:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    var o = {
    p: [
    'Hello',
    {y: 'World'}
    ]
    };
    var {p: [x, {y}]} = o;
    console.log(x); //Hello
    console.log(y); //World

字符串的扩展

  1. ES6新提供了三种方法判断某字符串是否包含在另一个字符串中:

    1
    2
    3
    boolean contains(string [, beginIndex]);
    boolean startsWith(string [, beginIndex]);
    boolean endsWith(string [, beginLength]);

    前两个函数中的第二个参数均表示开始位置,endsWith中的beginLength表示查看前n个字符:

    1
    2
    3
    "abc".endsWith("bc");  //true
    "abc".endsWith("bc", 2); //false
    "abc".endsWith("ab", 2); //true
  2. repeat(n):返回一个新字符串,该字符串将原字符串返回n次:

    1
    2
    let b = "a".repeat(3);
    console.log(b); //"aaa";
  3. 模板字符串(template string)-用反引号(`)标志,用三种作用:
    i. 同单引号”‘“一样,用于定义普通字符串

    1
    2
    let a = `ddd`;
    console.log(a); //ddd

    ii. 用于定义多行字符串

    1
    2
    3
    let a = `ab
    c`;

    console.log(a); //ab(换行)c

    iii. 定义模板

    1
    2
    3
    let name = "Alex";
    let t = `hello ${name}`
    console.log(t); //hello Alex

    这里需要注意的是模板并不会随变量内容的改变而改变:

    1
    2
    3
    4
    5
    let name = "Alex";
    let t = `hello ${name}`;
    console.log(t); //hello Alex
    name = 'John';
    console.log(t); //hello Alex

    且在使用前要预先定义好该变量:

    1
    let t = `hello ${undefinedVar}`;  //Uncaught ReferenceError: undefinedVar is not defined

数值的扩展

本文首发于http://www.miaoyunze.com/,转载请注明出处