Этого достаточно для ES6

Node.js внешний интерфейс JavaScript ECMAScript 6

1. пусть, константа

1.1 Проблемы с переменными

  1. var имеет проблемы с областью видимости (загрязняет глобальную область видимости)
  2. var может быть объявлен повторно
  3. var будет преинтерпретировать переменную подъемника
  4. var не может определять константы

1.2 функции let и const

  1. let и const не могут быть объявлены повторно
  2. let и const не объявлены в глобальной области видимости
  3. let и const не интерпретируют переменные заранее
  4. const объявляет константы (обычно имена констант пишутся с большой буквы)

1.3 Попробуйте

//1. 作用域
//var
var a = 5;
console.log(window.a); //5

//let、const
let a = 5;
console.log(window.a); //undefined
//有一个问题,let定义的a声明到哪里了呢?欢迎解释(:

//2. 重复声明 
//var 
var a = 5;
var a = 6;

//let、const
let a = 5;
let a = 6; //Identifier 'a' has already been declared 不能重复声明

//3. 预解释
//var
console.log(a); //undefined  相当于 var a;
var a = 5;

//let const
console.log(a)//Uncaught ReferenceError: a is not defined 语法错误,没有预解释
let a = 5;

//4. 常量
//var
var a = 5;
a = 6;

//const
const a = 5;
a = 6;//Uncaught TypeError: Assignment to constant variable. 语法错误

2. Деконструкция

Деструктуризация — это новая функция ES6, которая может напрямую анализировать содержимое объектов массива.

//1.数组解构
let [a1,a2,a3] = [1,2,3]; //a1 = 1; a2 = 2; a3 = 3;

//2.对象解构
let {name,age} = {name:'meteor',age:8}; //name = 'meteor',age = 8;
//let {name:n} = {name:'meteor',age:8};//n = 'meteor' 可以用“:”的形式修改变量名

//3.复杂解构
let [{age}] = [{age:8,name:'xx'},'深圳',[1,2,3]]; //age = 8   注意对象解构

//4.默认赋值
let {age=5} = {age:8,name:'xx'}; //age=8 如果没有age字段 age=5
//常用函数参数给默认值
//以前
function(){var a = a || 5}
//现在
function(a=5){}

3. Строка

Обратные кавычки "`" добавляются в es6, а ${} в обратных кавычках обрабатывает строки шаблона.

3.1 Обратные кавычки

  1. Более человеческая конкатенация строк
let name = 'xx';
let age = 9;
let str = `${name}${age}岁了`;
console.log(str); //xx今年岁了
  1. Простое моделирование с использованием обычного + eval
let name = 'xx';
let age = 9;
let str = `${name}${age}岁了`;
str = str.replace(/\$\{([^}]+)\}/g, function ($1) {
    return eval(arguments[1]);
})
console.log(str); //xx今年岁了
  1. Шаблонные символы с метками
//反引号前使用方法,方法按模版变量把字符串分成两个数组
//第一个为固定值组成的数组 
//第二个值为替换变量组成的数组
let name = 'xx';
let age = 9;
function tag(strArr, ...args) {
    var str = '';
    for (let i = 0; i < args.length; i++) {
        str += strArr[i] + args[i]
    }
    console.log(strArr,args);
    //[ '', '今年', '岁了' ]   [ 'xx', 9 ]
    //
    str += strArr[strArr.length - 1];
    return str;
}
let str = tag`${name}今年${age}岁了`;
console.log(str);

3.2 включает метод

//判断字符串中是否包含某个字符串
let str = 'woaini';
str.includes('ai'); //true

3.3 методы endWith, startWith

//判断字符串是否以某一个字符串开始或结束
var a = '1AB2345CD';
console.log(a.startsWith('1A')); //true
a.endsWith('cD') //false

4. Функция

4.1 Функциональные параметры могут быть назначены и деструктурированы

function({a=5}){}

4.2 Стрелочные функции

  1. Если параметр только один, круглые скобки можно опустить.
  2. Если вы не пишете return, вы можете опустить фигурные скобки
  3. переменная без аргументов
  4. Не изменяйте этот указатель
//求和
let sum = (a,b)=>a+b;

5. Массивы

5.1 Новые методы для массивов

  1. Array.from();//Преобразуем массив класса в массив
  2. Array.of();//Создаем массив
  3. Array.fill();//заполняем массив
  4. Array.reduce();//Входящий callback подходит для обработки соседних элементов массива
  5. Array.filter();//Фильтрация массива
  6. Array.find();//Находим возвращаемое значение
  7. Array.includes();//Определяем, есть ли в массиве определенное значение

5.2 Array.from()

//Array.from();
let arr = Array.from({'0':1,'1':2,length:2});
console.log(arr);//[1,2]

5.3 Array.of()

Array.of(2,3); //[2,3]

5.4 Array.reduce()

[1, 2, 3, 4, 5].reduce((prev, next, index, current) => {
    //prev 如果reduce传入第二个参数,prev为第二个参数;否则prev为数组第一个元素  往后累加
    //next 如果reduce传入第二个参数,next为第数组第一个元素;否则next为数组第二个元素  依次累加
    //index 函数第几次执行1开始
    //current当前数组
    return prev + next;
})
//reduce方法简单实现
Array.prototype.myReduce = function (cb, pre) {
    let prev = pre || this[0];
    for (var i = pre ? 0 : 1; i < this.length; i++) {
        prev = cb(prev, this[i], i, this);
    }
    return prev;
}

5.3 Array.filter();

let result = [1,2,3,4,5].filter(function(item){
    return item>3;
})
console.log(result);//[4,5]
//filter简单实现
Array.prototype.myFilter = function(cb){
    var arr = [];
    for(var i=0; i<this.length; i++){
        var item = this[i];
        if( cb(item) ) arr.push(item);
    }
    return arr;
}

5.4 Array.find();

let result = [1,1,1,2,3].find(function(item){
    return item == 2;
})
console.log(result);//2

6. Объекты

6.1 Если ключ и значение равны, его можно сократить

let name = 'xx';
let obj = {name};

6.2 Деконструкция

7. Класс

  1. Класс определяет класс
  2. расширяет реализует наследование
  3. Поддержка статических методов
  4. метод построения конструктора
class Parent{
    constructor(name){
        this.name = name;
    }
    getName(){
        return this.name;
    }
    static fn(){
        return 9;
    }
}
class Child extends Parent{
    constructor(name,age){
        super(name);//子类有构造函数必须有super
        this.age = age;
    }
}
let child = new Child('xingxing',9);
console.log(child.getName());//xingxing
console.log(child.name);//xingxing
console.log( Child.fn() );//9

8. Generator

8.1 Используйте «*» перед именем функции итератора

function *gen(){}

8.2 урожайность

Итератор временно приостанавливает выполнение, когда сталкивается с yield, и вызывает метод next итератора для продолжения выполнения.

8.3 Попробуйте

function *gen(){
    let a = yield 'xx';
    console.log(a);//a
    let b = yield 9;
    console.log(b);
    return b;
}
let it = gen();
console.log(it.next('a'));// value: 'xx', done: false }
console.log(it.next('b'));//{ value: 9, done: false }

8.4 Объединение с promise co

let bluebird = require('bluebirld');
let co = require('co');
let fs = require('fs');
let read = bluebird.promisify(fs.readFile);
function *r(){
    let content1 = yield read('./1.txt','utf8'); //内容 ./2.txt
    let content2 = yield read(content1,'utf8');
    return content2;
}
let it = r();
//可以自动迭代generator
co(it).then(function(data){
    console.log(data);
});
//实现异步代码同步化

9. async await

  1. async используется для оформления функций и должен использоваться с ожиданием
  2. Вы можете следовать обещаниям только после ожидания
let bluebird = require('bluebird');
let fs = require('fs');
let read = bluebird.promisify(fs.readFile);
//await 后只能跟promise
async function r(){
    let content1 = await read('./1.txt','utf8');
    let content2 = await read(content1,'utf8');
    return content2;
}
//async返回promise
r().then(function(data){
    console.log(data); 
})