保存
×

随着 nodejs 和 iojs 的合并,原生支持 ECMAScript2015(ES6) 的特性让人看到了ES6在实际运用的良好条件。而浏览器端,则有类似于 Babel 之类的编译器,将 ES6 转换为 ES5 供普通浏览器使用,尤其是移动端基本上都支持ES5。本文记录ES6中的一些新特性

Block-Scope

Arrow Function

Extened Parameter Handling


Spread Operator

... 作用在数组和对象前面时,执行 spread 运算,具体表现为: + 将数组对象展开为函数所需要的参数

    Math.max(...[1, 5, 8, 10]) // == Math.max(1, 5, 8, 10)
    let cities = ['San Francisco', 'Los Angeles'];
    let places = ['Miami', ...cities, 'Chicago']; // ['Miami', 'San Francisco', 'Los Angeles', 'Chicago']


Symbol

symbol 是唯一且不变的数据类型,能作为对象属性的标识符,即作为哈希对象的键值,其使用示例如下

var obj = {};

obj[Symbol("a")] = "a";
obj[Symbol.for("b")] = "b";
obj["c"] = "c";
obj.d = "d";

for (var i in obj) {
   console.log(i); // logs "c" and "d"
}

// 
Symbol('foo') === Symbol('foo') // false
Symbol.for('foo') === Symbol('foo') // false
Symbol.for('foo') === Symbol.for('foo') // true


Map

Map 是新的数据结构,能对内部含有的值进行set, get, search等操作。最重要的是不像对象哈希那样只 接受字符串作为 key,Map 接受任何类型的 key 且不会将其转换为字符串。其初始化语法如下:

let map = new Map([
    ['name', 'david'],
    [true, 'false'],
    [{}, 'object'],
    [function () {}, 'function']
]);

for (let key of map.keys()) {
    console.log(typeof key);
    // > string, boolean, number, object, function
}

for (let [key, value] of map.entries()) {
    console.log(key, value);
}

WeakMap

WeakMap 对象相比 Map 对象,其key是弱引用的,因此只能是对象,当这个key指向的对象被删除的时候, 这个weakmap里关联的value会被自动清除。在进行一些dom相关的cache时,尤为有用。