本文采用知识共享 署名-相同方式共享 4.0 国际 许可协议进行许可。
访问 https://creativecommons.org/licenses/by-sa/4.0/ 查看该许可协议。

ES6

1) 变量关键字

1.1) let

let实现了作用域

1.2) const

const实现了常量

2) 字符串扩展

2.1) includes()

是否include了传入str

2.2) startsWith()

传入str是否在头部

2.3) endsWith()

传入str是否在尾部

2.4) 模板标记

`构建字符串,中可任意换行

3) 解构表达式

3.1) Array解构[]

let arr = [1, 3, 5];
let [a,b] = arr;
console.log(a, b);

3.2) 对象解构{}

let obj = {name: "Wars", cat: "wcat"};
let {name, cat} = obj;
console.log(name, cat);
let {name:n, cat:c} = obj;
console.log(n, c);

4) 函数优化

4.1) 函数形参默认值

function func(a, b = 10) {
    return a + b;
}
console.log(func(1));

4.2) 箭头函数

// 等价于上
let func2 = (a, b=10) => a + b;
console.log(func2(1));
// 无形参
let func5 = () => console.log('func5')
// 单形参
let func3 = a => a + 10;
console.log(func3(1));
// 多行实现
let func4 = a => {
    return a + 10;
}
console.log(func4(1));

4.3) 对象嵌套函数简写以及箭头函数结合解构

let person = {
    name : "Wars",
    func1: function(){
        console.log(this.name, );
    },
    // 不能使用this
    func2 : () => console.log(person.name),
    // 忽略key
    func3(){
        console.log(this.name);
    }
}
// 结合解构
({name}) => {
    console.log(name);
}

5) Map和Reduce

5.1) Map

拿出Array中每个元素执行传入函数,将返回值产生一个新Array

    let arr3 = ['1', '2', '3'];
    let arr4 = arr3.map(s => parseInt(s));
    console.log(arr4);

5.2) Reduce

reduce(func(a, b), [initvar])
形参1接受一个函数,a为初始值,b为Array下一个参数,不定义
形参2时初始值为Array[0],反之b为Array[0],函数返回值充当
下一个a,遍历完所有元素reduce返回结果

    let arr5 = [1, 2, 3];
    let result0 = arr5.reduce((a, b) => a + b, 0);
    console.log(result0)

6) 扩展运算符

...array,将一个array转成一个参数序列

let func6 = (a, b) => a+b;
let arr7 = [1, 2];
console.log(func6(...arr7));
// 数组合并
let arr8 = [...arr7, 3];
console.log(arr8);
// 结合解构
let [ax, ...axs] = arr8;
console.log(ax, axs);
// 字符串转array
console.log([..."array"]);

7) Promise容器

可以理解为一个异步操作容器,并提供了回调用于外部访问

const promise = new Promise(function(resolve, reject) {
    // ..........
    if (true){
        resolve("OK");
    }else{
        reject("ERROR");
    }
});
// 获取成功回调
promise.then(function(value) {
    console.log(value)
}).catch(function(error) {
    console.log(error)
});

8) Set和Map

Map和Object的区别:map的key可以是任意类型,obj只能是str

// Set
let set = new Set();
set.add(1); // 添加
// 使用Array初始化
set = new Set([1, 2, 3, 4]);
set.clear();    // 晴空
set.has(1); // 是否存在
set.delete(1);  // 删除为1元素
set.forEach(func);// 遍历元素
set.size;   // 元素个数,非函数
// Map
let map = new Map([ // 构造函数接受嵌套数组
     ["k1", "v1"]
    ,["k2", "v2"]
]);
// 接收Set
map = new Map(
    new Set([
         ["k1", "v1"]
        ,["k3", "v3"]
    ])
);
map = map; // 接收map

map.clear();    // 清空
map.delete(key);// 删除
map.has(key);   // 是否存在
map.size;   // 元素个数,非函数
map.forEach((k,v) => {});    // 遍历
map.values();   // 获取Value迭代器
map.keys(); // 获取key迭代器
map.entries();  // 获取entries迭代器

9) Class

class Person{
    constructor(name, age = 18) {
        this.name = name;
        this.age = age;
    }

    getName(){
        return this.name;
    }

    static isAdult(age) {
        if(18 <= age) {
            return true;
        }
            return false;
    }
}

class User extends Person{
    constructor() {
        super("name", 16);
    }
}

10) Generator函数

异步编程解决方案
通过function* 定义,函数体使用yield定义内部状态

functoin* gen() {
    // before
    yield "before";
    // body
    yield "body";
    // after
    yield "after";
    return "done";
}

let g = gen();
console.log(g.next()); // value: before, done: false
console.log(g.next()); // value: body, done: false
console.log(g.next()); // value: after, done: false
console.log(g.next()); // value: done, done: true
console.log(g.next()); // value: undefined, done: true

11) Decorator修饰器

SE7引入Decorator是一个函数,用来修改类的行为

@T // 该类似于注解东西表示引用该类
class User{
    constructor() {
    }
}

function T(target) {
    target.name = "Wars";
}

11.1) 转码器

用于把高规范代码转成SE5代码

  • Babel
  • Traceur