ES6系列

  • 块级作用域的出现

    通过 var 声明的变量存在变量提升的特性:

    if (condition) {
        var value = 1;
    }
    console.log(value);

    初学者可能会觉得只有 condition 为 true 的时候,才会创建 value,如果 condition 为 false,结果应该是报错,然而因为变量提升的原因,代码相当于:

    var value;
    if (condition) {
        value = 1;
    }
    console.log(value);

    如果 condition 为 false,结果会是 undefined。

    除此之外,在 for 循环中:

    f
  • 基础用法

    let message = `Hello World`;
    console.log(message);

    如果你碰巧要在字符串中使用反撇号,你可以使用反斜杠转义:

    let message = `Hello \` World`;
    console.log(message);

    值得一提的是,在模板字符串中,空格、缩进、换行都会被保留:

    let message = `
    	<ul>
    		<li>1</li>
    		<li>2</li>
    	</ul>
    `;
    console.log(message);

    string

    注意,打印的结果中第一行是一

  • 回顾

    我们先来回顾下箭头函数的基本语法。

    ES6 增加了箭头函数:

    let func = value => value;

    相当于:

    let func = function (value) {
        return value;
    };

    如果需要给函数传入多个参数:

    let func = (value, num) => value * num;

    如果函数的代码块需要多条语句:

    let func = (value, num) => {
        return value * num
    };

    如果需要直接返回一个对象:

    let func = (value, num) => ({to
  • 前言

    实际上,Symbol 的很多特性都无法模拟实现……所以先让我们回顾下有哪些特性,然后挑点能实现的……当然在看的过程中,你也可以思考这个特性是否能实现,如果可以实现,该如何实现。

    回顾

    ES6 引入了一种新的原始数据类型 Symbol,表示独一无二的值。

    1. Symbol 值通过 Symbol 函数生成,使用 typeof,结果为 "symbol"

    var s = Symbol();
    console.log(typeof s); // "symbol"

    2. Symbol 函数前不能使用 new 命令,否则会报错。这是因为生成的 Symbol 是一个原始类型的值,不是对象。

    3. ins

  • 起源

    一段标准的 for 循环代码:

    var colors = ["red", "green", "blue"];
    
    for (var i = 0, len = colors.length; i < len; i++) {
        console.log(colors[i]);
    }

    看着很简单,但是再回顾这段代码,实际上我们仅仅是需要数组中元素的值,但是却需要提前获取数组长度,声明索引变量等,尤其当多个循环嵌套的时候,更需要使用多个索引变量,代码的复杂度就会大大增加,比如我们使用双重循环进行去重:

    function unique(array) {
        var res = [];