SlideShare a Scribd company logo
1 of 46
Download to read offline
ES2015+
Давно пора!
Ярослав Савченко
Про ES
Почему ECMA?
Ecma International - организация, которая занимается стандартизацией
информационных и коммуникационных технологий.
ECMAScript - стандарт, основа для создания скриптовых языков.
Таких как: JScript, ActionScript, JavaScript (браузеры, NodeJS, ...)
Немного скучной истории
1995 - Появление JavaScript
1997 - ES1
1998 - ES2, минорные правки
1999 - ES3
2008 - ES4 (так и не вышел)
2009 - ES5
2015 - ES2015
Что сейчас со стандартом
Ежегодные релизы
Фичи проходят несколько стадий:
● Stage 0 Proposals
● Active Proposals (stage 1-3)
● Finished Proposals
● Inactive Proposals
Готовые фичи входят в стандарт
Браузеры не успевают. Некоторые разработчики тоже :)
Некоторые фичи
1. let & const - замена var
Область видимости - блок {} (if, for, etc.), а не функция
let a = 5;
if (true) {
let a = 10;
console.log(a); // 10 внутри блока
}
console.log(a); // 5 снаружи блока
var a = 5;
if (true) {
var a = 10;
console.log(a); // 10 внутри блока
}
console.log(a); // 10 снаружи блока
1. let & const - замена var
Нет всплытия (hoisting)
console.log(a); // error!
let a = 5;
console.log(a); // undefined
var a = 5;
1. let & const - замена var
Константы
const a = 42;
a = 0; // error!
const a = {
value: 0
}
a.value = 42; // ok
a = 'new value'; // error!
2. Литералы объектов
Свойства
let eventName = 'miniq';
let city = 'Vitebsk';
let conference = {
eventName,
city,
getCity() {
return this.city;
}
};
//эквивалентно
eventName: eventName,
city: city,
getCity: function() {
return this.city;
}
2. Литералы объектов
Свойства
let eventName = 'miniq';
let city = 'Vitebsk';
let conference = {
eventName,
city,
getCity() {
return this.city;
}
};
//эквивалентно
eventName: eventName,
city: city,
getCity: function() {
return this.city;
}
2. Литералы объектов
[вычисляемые имена свойств]
let eventName = 'miniq';
let city = 'Vitebsk';
let conference = {
eventName,
city,
[city + '-17']: guestsCount,
getCity() {
return this.city;
}
};
conference[city + '-17'] = guestsCount;
2. Литералы объектов
Ссылка на прототип __proto__
let eventName = 'miniq';
let city = 'Vitebsk';
let conference = {
__proto__: Event,
eventName,
city,
[city + '-17']: guestsCount,
getCity() {
return this.city;
}
};
2. Литералы объектов
Доступ к родительским свойствам через super
let eventName = 'miniq';
let city = 'Vitebsk';
let conference = {
__proto__: Event,
eventName,
city,
[city + '-17']: guestsCount,
getCity() {
return this.city;
},
registerAttendee() {
super.registerPerson();
}
};
‘Event.prototype.registerPerson’
в контексте conference
3. Деструктурирующее присваивание
Объекты
$.get( '/miniq/2017', ( response ) => {
{time, date, guestsCount} = response;
//...
});
$.get( '/miniq/2017', ( response ) => {
{guestsCount, ...dateAndTime} = response;
//...
});
dateAndTime = {
date: '23.03.2017',
time: '19:00'
}
{
guestsCount: 9001,
date: '23.03.2017',
time: '19:00'
}
3. Деструктурирующее присваивание
Объекты, rest-параметры
$.get( '/miniq/2017', ( response ) => {
{time, date, guestsCount} = response;
//...
});
$.get( '/miniq/2017', ( response ) => {
{guestsCount, ...dateAndTime} = response;
//...
});
dateAndTime = {
date: '23.03.2017',
time: '19:00'
}
{
guestsCount: 9001,
date: '23.03.2017',
time: '19:00'
}
3. Деструктурирующее присваивание
Объекты, деструктурирование объекта-параметра
$.get( '/miniq/2017', ( {guestsCount, date, time} ) => {
//...
});
$.get( '/miniq/2017', ( {guestsCount, ...dateAndTime} ) => {
//...
});
3. Деструктурирующее присваивание
Массивы
let miniq = ['Tech debt', 'ES2015+', 'Competitions', 'coffee', 'good mood'];
function showInfo([firstTheme, secondTheme, thirdTheme, ...rest]) {
console.log(secondTheme);
console.log(rest.join(','));
}
showInfo(miniq);
// ES2015+
// coffee,good mood
3. Деструктурирующее присваивание
Массивы
let miniq = ['Tech debt', 'ES2015+', 'Competitions', 'coffee', 'good mood'];
function showInfo([firstTheme, secondTheme, thirdTheme, ...rest]) {
console.log(secondTheme);
console.log(rest.join(','));
}
showInfo(miniq);
// ES2015+
// coffee,good mood
4. Строки
Строки-шаблоны
let attendee = 'Ivan';
function getNextNumber(){/*...*/};
console.log(`Hi, ${attendee}! Your number is ${getNextNumber()}!`);
Многострочные литералы
let multiline = 'Yes,
now it’s
possible';
` - это backtick, он живет на кнопке “ё” и помогает делать:
4. Строки
Строки-шаблоны
let attendee = 'Ivan';
function getNextNumber(){/*...*/};
console.log(`Hi, ${attendee}! Your number is ${getNextNumber()}!`);
Многострочные строки
let multiline = 'Yes,
now it’s
possible';
` - это backtick, он живет на кнопке “ё” и помогает делать:
5. Стрелочные функции
function() {}
() => {}
5. Стрелочные функции
Сохранение контекста
let miniq = {
greeting: 'Hi there',
startTimer: function() {
setTimeout(function() {
console.log(this.greeting); //this === window
}, time);
}
}
let miniq = {
greeting: 'Hi there',
startTimer: () => {
setTimeout(() => {
console.log(this.greeting); //this === miniq. Прощай, self = this!
}, time);
}
}
5. Стрелочные функции
Autoreturn
[1, 2, 3].map( n => n+1 );
6. Параметры по-умолчанию
function getHeadline(title, date, place){
title = title || 'Miniq';
date = date || '23.03.2017';
place = place || 'Vitebsk';
console.log(`${title}, ${date} in ${place}`);
}
function getHeadline(title = 'Miniq', date = '23.03.2017', place = 'Vitebsk'){
console.log(`${title}, ${date} in ${place}`);
}
7. Классы
Как было:
function Point(x, y) {
this.x = x;
this.y = y;
}
Point.prototype.toString = function() {
return `(${this.x}, ${this.y})`;
}
7. Классы
Как наследовались:
function Point(x, y) {...}
function ColorPoint(x, y, color) {
this.x = x;
this.y = y;
this.color = color;
}
ColorPoint.prototype = Object.create(Point.prototype);
ColorPoint.prototype.constructor = ColorPoint;
ColorPoint.prototype.toStringWithColor = function() {
return `(${this.x}, ${this.y}) -
${this.color}`;
}
7. Классы
Как стало:
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
toString() {
return `(${this.x}, ${this.y})`;
}
static get hello() {
return 'Hi, I'm a point!'
}
}
7. Классы
Наследование:
class Point {...}
class ColorPoint extends Point {
constructor(x, y, color) {
super(x, y);
this.color = color;
}
toString() {
return super.toString() +
` - ${this.color}`;
}
}
7. Классы
Наследование:
class Point {...}
class ColorPoint extends Point {
constructor(x, y, color) {
super(x, y);
this.color = color;
}
toString() {
return super.toString() +
` - ${this.color}`;
}
}
8. Модули
Как было без модулей?
● Проблемы с порядком загрузки
● “Сшивание” файлов
● Общая область видимости
● Все в одной куче
Плохо, короче.
8. Модули
“Стройка встала, на стройке паралич:
Прораб изобретает свой собственный кирпич”
● Module pattern
● AMD (RequireJS)
● CommonJS
● UMD
8. Модули
Стандартное решение: import & export
// event-utility.js
const config = {/*...*/}
export function sendInvitation(person) {/*...*/}
export function registerSomeone(person) {/*...*/}
8. Модули
// event-utility.js
const config = {/*...*/}
export function sendInvitation(person) {/*...*/}
export function registerSomeone(person) {/*...*/}
// miniq-app.js
// импорт одной из функций
import {sendInvitation} from './event-utility';
// импорт функции в переменную с другим именем
import {registerSomeone as register} from './event-utility';
// импорт всего содержимого в объект
import * as util from './event-utility';
// ...
export class MiniqApp {/*...*/}
8. Модули
// event-utility.js
const config = {/*...*/}
export function sendInvitation(person) {/*...*/}
export function registerSomeone(person) {/*...*/}
// miniq-app.js
// импорт одной из функций
import {sendInvitation} from './event-utility';
// импорт функции в переменную с другим именем
import {registerSomeone as register} from './event-utility';
// импорт всего содержимого в объект
import * as util from './event-utility';
// ...
export class MiniqApp {/*...*/}
8. Модули
// event-utility.js
const config = {/*...*/}
export function sendInvitation(person) {/*...*/}
export function registerSomeone(person) {/*...*/}
// miniq-app.js
// импорт одной из функций
import {sendInvitation} from './event-utility';
// импорт функции в переменную с другим именем
import {registerSomeone as register} from './event-utility';
// импорт всего содержимого в объект
import * as util from './event-utility';
// ...
export class MiniqApp {/*...*/}
8. Модули
// event-utility.js
const config = {/*...*/}
export function sendInvitation(person) {/*...*/}
export function registerSomeone(person) {/*...*/}
// miniq-app.js
// импорт одной из функций
import {sendInvitation} from './event-utility';
// импорт функции в переменную с другим именем
import {registerSomeone as register} from './event-utility';
// импорт всего содержимого в объект
import * as util from './event-utility';
// ...
export class MiniqApp {/*...*/}
8. Модули
// miniq-app.js
import {sendInvitation} from './event-utility';
import {sendInvitation as invite} from './event-utility';
import * as util from './event-utility';
// ...
export class MiniqApp {/*...*/}
// app.js
import {MiniqApp} from './miniq-app';
8. Модули
// miniq-app.js
import {sendInvitation} from './event-utility';
import {sendInvitation as invite} from './event-utility';
import * as util from './event-utility';
// ...
export default class MiniqApp {/*...*/}
// app.js
import Miniq from './miniq-app';
И это еще не все!..
● Promises
● Set, Map, Weakset & Weakmap
● Итераторы, for … of
● Генераторы
● async/await
● Symbol
● Proxie
● Unicode
● ...
И как этим воспользоваться?
Часть уже есть в браузерах.
https://kangax.github.io/compat-table/es6/
И как этим воспользоваться?
Для модулей понадобится сборщик / загрузчик:
● Webpack (мощный, но требует Webpack Ops)
● Rollup (попроще)
● SystemJS
Для остального - транспайлеры
● Babel (остальные не нужны)
● Traceur
И как этим воспользоваться?
Babel
Как часть процесса сборки:
module: {
rules: [
{
test: /.js$/,
exclude: /(node_modules)/,
use: {
loader: 'babel-loader',
options: {
presets: ['env']
}
}
И как этим воспользоваться?
Babel
В консоли:
babel script.js --out-file script-compiled.js
Или прямо на странице:
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
Зачем все это?
Плюсы:
● Улучшают читаемость
● Упрощают некоторые задачи
● Делают прежде неясные моменты более четкими
Минусы:
● Непривычно
● Усложнение процесса сборки
We need to go deeper!
ES6 in Depth:
https://ponyfoo.com/articles/tagged/es6-in-depth
Современные возможности ES-2015:
https://learn.javascript.ru/es-modern
Таблицы поддержки новых возможностей
https://kangax.github.io/compat-table/es6/
http://node.green/
Спасибо за внимание!
Вопросы?

More Related Content

What's hot

DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...it-people
 
Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10
Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10
Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10Mikhail Kurnosov
 
Правильная организация клиент-карточного взаимодействия — Антон Корзунов
Правильная организация клиент-карточного взаимодействия — Антон КорзуновПравильная организация клиент-карточного взаимодействия — Антон Корзунов
Правильная организация клиент-карточного взаимодействия — Антон КорзуновYandex
 
Антон Полухин, Немного о Boost
Антон Полухин, Немного о BoostАнтон Полухин, Немного о Boost
Антон Полухин, Немного о BoostSergey Platonov
 
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
 
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации..."Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...Yandex
 
Что API Карт забыл на сервере — Антон Корзунов
Что API Карт забыл на сервере — Антон КорзуновЧто API Карт забыл на сервере — Антон Корзунов
Что API Карт забыл на сервере — Антон КорзуновYandex
 
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...Ontico
 
Максим Хромцов "Yandex MapKit для Android OS в примерах"
Максим Хромцов "Yandex MapKit для Android OS в примерах"Максим Хромцов "Yandex MapKit для Android OS в примерах"
Максим Хромцов "Yandex MapKit для Android OS в примерах"Yandex
 
GAE - плюсы/минусы/подводные камни
GAE - плюсы/минусы/подводные камниGAE - плюсы/минусы/подводные камни
GAE - плюсы/минусы/подводные камниYehor Nazarkin
 
Александр Тармолов "API Яндекс.Карт"
Александр Тармолов "API Яндекс.Карт"Александр Тармолов "API Яндекс.Карт"
Александр Тармолов "API Яндекс.Карт"Yandex
 
Memory managment in i os (1)
Memory managment in i os (1)Memory managment in i os (1)
Memory managment in i os (1)it-park
 
Функционально декларативный дизайн на C++
Функционально декларативный дизайн на C++Функционально декларативный дизайн на C++
Функционально декларативный дизайн на C++Alexander Granin
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Vasya Petrov
 
"Погружение в Robolectric" Дмитрий Костырев (Avito)
"Погружение в Robolectric"  Дмитрий Костырев (Avito)"Погружение в Robolectric"  Дмитрий Костырев (Avito)
"Погружение в Robolectric" Дмитрий Костырев (Avito)AvitoTech
 

What's hot (19)

DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
 
Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10
Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10
Лекция 12 (часть 2): Языки программирования семейства PGAS: IBM X10
 
Правильная организация клиент-карточного взаимодействия — Антон Корзунов
Правильная организация клиент-карточного взаимодействия — Антон КорзуновПравильная организация клиент-карточного взаимодействия — Антон Корзунов
Правильная организация клиент-карточного взаимодействия — Антон Корзунов
 
Антон Полухин, Немного о Boost
Антон Полухин, Немного о BoostАнтон Полухин, Немного о Boost
Антон Полухин, Немного о Boost
 
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++
 
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации..."Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
 
Что API Карт забыл на сервере — Антон Корзунов
Что API Карт забыл на сервере — Антон КорзуновЧто API Карт забыл на сервере — Антон Корзунов
Что API Карт забыл на сервере — Антон Корзунов
 
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...ObjectManager, или как работать с большим количеством объектов на карте, Мари...
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
 
Clojure #2 (2014)
Clojure #2 (2014)Clojure #2 (2014)
Clojure #2 (2014)
 
Clojure #1
Clojure #1Clojure #1
Clojure #1
 
Максим Хромцов "Yandex MapKit для Android OS в примерах"
Максим Хромцов "Yandex MapKit для Android OS в примерах"Максим Хромцов "Yandex MapKit для Android OS в примерах"
Максим Хромцов "Yandex MapKit для Android OS в примерах"
 
msumobi2. Лекция 2
msumobi2. Лекция 2msumobi2. Лекция 2
msumobi2. Лекция 2
 
GAE - плюсы/минусы/подводные камни
GAE - плюсы/минусы/подводные камниGAE - плюсы/минусы/подводные камни
GAE - плюсы/минусы/подводные камни
 
Александр Тармолов "API Яндекс.Карт"
Александр Тармолов "API Яндекс.Карт"Александр Тармолов "API Яндекс.Карт"
Александр Тармолов "API Яндекс.Карт"
 
Memory managment in i os (1)
Memory managment in i os (1)Memory managment in i os (1)
Memory managment in i os (1)
 
Функционально декларативный дизайн на C++
Функционально декларативный дизайн на C++Функционально декларативный дизайн на C++
Функционально декларативный дизайн на C++
 
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
 
Javascript
JavascriptJavascript
Javascript
 
"Погружение в Robolectric" Дмитрий Костырев (Avito)
"Погружение в Robolectric"  Дмитрий Костырев (Avito)"Погружение в Robolectric"  Дмитрий Костырев (Avito)
"Погружение в Robolectric" Дмитрий Костырев (Avito)
 

Viewers also liked

Разработка в долг
Разработка в долгРазработка в долг
Разработка в долгVitebsk Miniq
 
Соревнования по программированию
Соревнования по программированиюСоревнования по программированию
Соревнования по программированиюVitebsk Miniq
 
Reach.UrFaculty - Govt. Jobs Update Mar 24
Reach.UrFaculty - Govt. Jobs Update Mar 24Reach.UrFaculty - Govt. Jobs Update Mar 24
Reach.UrFaculty - Govt. Jobs Update Mar 24Reshmaurfaculty
 
3Com 1697-560-000-1.00
3Com 1697-560-000-1.003Com 1697-560-000-1.00
3Com 1697-560-000-1.00savomir
 
Third True Copy of SLP Civil No. 19073 of 2013 before SC
Third True Copy of SLP Civil No. 19073 of 2013 before SCThird True Copy of SLP Civil No. 19073 of 2013 before SC
Third True Copy of SLP Civil No. 19073 of 2013 before SCOm Prakash Poddar
 
Islam 101 - beliefs and practises
Islam 101 - beliefs and practisesIslam 101 - beliefs and practises
Islam 101 - beliefs and practisesabdulg99
 
Amalan terbaik pembangunan sosial
Amalan terbaik pembangunan sosialAmalan terbaik pembangunan sosial
Amalan terbaik pembangunan sosialmeylahasim97
 
Startlist 2017.xlsx results athletes
Startlist 2017.xlsx   results athletesStartlist 2017.xlsx   results athletes
Startlist 2017.xlsx results athletesAlberto Stretti
 
Startlist 2017.xlsx startlist
Startlist 2017.xlsx   startlistStartlist 2017.xlsx   startlist
Startlist 2017.xlsx startlistAlberto Stretti
 
M.E.L.I.G. Unikernel and Serverless
M.E.L.I.G. Unikernel and ServerlessM.E.L.I.G. Unikernel and Serverless
M.E.L.I.G. Unikernel and ServerlessQNIB Solutions
 
Тестируем тесты с PIT (мутационное тестирование)
Тестируем тесты с PIT (мутационное тестирование)Тестируем тесты с PIT (мутационное тестирование)
Тестируем тесты с PIT (мутационное тестирование)Vitebsk Miniq
 
Оптимизация потребления памяти в Java - делаем уборку правильно
Оптимизация потребления памяти в Java - делаем уборку правильноОптимизация потребления памяти в Java - делаем уборку правильно
Оптимизация потребления памяти в Java - делаем уборку правильноVitebsk DSC
 
Blockchain: is just buzzword?
Blockchain: is just buzzword?Blockchain: is just buzzword?
Blockchain: is just buzzword?Vitebsk Miniq
 
3Com 6756-10/C
3Com 6756-10/C3Com 6756-10/C
3Com 6756-10/Csavomir
 

Viewers also liked (14)

Разработка в долг
Разработка в долгРазработка в долг
Разработка в долг
 
Соревнования по программированию
Соревнования по программированиюСоревнования по программированию
Соревнования по программированию
 
Reach.UrFaculty - Govt. Jobs Update Mar 24
Reach.UrFaculty - Govt. Jobs Update Mar 24Reach.UrFaculty - Govt. Jobs Update Mar 24
Reach.UrFaculty - Govt. Jobs Update Mar 24
 
3Com 1697-560-000-1.00
3Com 1697-560-000-1.003Com 1697-560-000-1.00
3Com 1697-560-000-1.00
 
Third True Copy of SLP Civil No. 19073 of 2013 before SC
Third True Copy of SLP Civil No. 19073 of 2013 before SCThird True Copy of SLP Civil No. 19073 of 2013 before SC
Third True Copy of SLP Civil No. 19073 of 2013 before SC
 
Islam 101 - beliefs and practises
Islam 101 - beliefs and practisesIslam 101 - beliefs and practises
Islam 101 - beliefs and practises
 
Amalan terbaik pembangunan sosial
Amalan terbaik pembangunan sosialAmalan terbaik pembangunan sosial
Amalan terbaik pembangunan sosial
 
Startlist 2017.xlsx results athletes
Startlist 2017.xlsx   results athletesStartlist 2017.xlsx   results athletes
Startlist 2017.xlsx results athletes
 
Startlist 2017.xlsx startlist
Startlist 2017.xlsx   startlistStartlist 2017.xlsx   startlist
Startlist 2017.xlsx startlist
 
M.E.L.I.G. Unikernel and Serverless
M.E.L.I.G. Unikernel and ServerlessM.E.L.I.G. Unikernel and Serverless
M.E.L.I.G. Unikernel and Serverless
 
Тестируем тесты с PIT (мутационное тестирование)
Тестируем тесты с PIT (мутационное тестирование)Тестируем тесты с PIT (мутационное тестирование)
Тестируем тесты с PIT (мутационное тестирование)
 
Оптимизация потребления памяти в Java - делаем уборку правильно
Оптимизация потребления памяти в Java - делаем уборку правильноОптимизация потребления памяти в Java - делаем уборку правильно
Оптимизация потребления памяти в Java - делаем уборку правильно
 
Blockchain: is just buzzword?
Blockchain: is just buzzword?Blockchain: is just buzzword?
Blockchain: is just buzzword?
 
3Com 6756-10/C
3Com 6756-10/C3Com 6756-10/C
3Com 6756-10/C
 

Similar to ES2015+: давно пора!

YiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииYiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииPaul Klimov
 
Yii: миграции и инсталляции
Yii: миграции и инсталляцииYii: миграции и инсталляции
Yii: миграции и инсталляцииPaul Klimov
 
Web internship java script
Web internship   java scriptWeb internship   java script
Web internship java scriptNoveo
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и MinkBehat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Minktyomo4ka
 
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеГлеб Тарасов
 
Где кончается react native? / Павел Кондратенко (Rambler&Co)
Где кончается react native? / Павел Кондратенко (Rambler&Co)Где кончается react native? / Павел Кондратенко (Rambler&Co)
Где кончается react native? / Павел Кондратенко (Rambler&Co)Ontico
 
Techtalk#8: Design patterns in real life
Techtalk#8: Design patterns in real lifeTechtalk#8: Design patterns in real life
Techtalk#8: Design patterns in real lifeDA-14
 
Take more from Jquery
Take more from JqueryTake more from Jquery
Take more from JqueryMagento Dev
 
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)Ontico
 
"Жизнь без интернета" Кувалдин Артём, Яндекс
"Жизнь без интернета" Кувалдин Артём, Яндекс"Жизнь без интернета" Кувалдин Артём, Яндекс
"Жизнь без интернета" Кувалдин Артём, Яндексit-people
 
Превышаем скоросные лимиты с Angular 2
Превышаем скоросные лимиты с Angular 2Превышаем скоросные лимиты с Angular 2
Превышаем скоросные лимиты с Angular 2Oleksii Okhrymenko
 
FPUG Dzyga presentation
FPUG Dzyga presentationFPUG Dzyga presentation
FPUG Dzyga presentationIvan Filimonov
 
Язык программирования C#
Язык программирования C#Язык программирования C#
Язык программирования C#Dmitri Soshnikov
 
Как навести порядок в коде вашего web-приложения, Андрей Чебукин
Как навести порядок в коде вашего web-приложения, Андрей Чебукин Как навести порядок в коде вашего web-приложения, Андрей Чебукин
Как навести порядок в коде вашего web-приложения, Андрей Чебукин Sigma Software
 
Making Scalable JavaScript Application
Making Scalable JavaScript ApplicationMaking Scalable JavaScript Application
Making Scalable JavaScript ApplicationMikhail Davydov
 
Tdd webpack + testem + mocha + chai
Tdd webpack + testem + mocha + chaiTdd webpack + testem + mocha + chai
Tdd webpack + testem + mocha + chaiMichael Chernobrov
 
MyBatis на практике
MyBatis на практикеMyBatis на практике
MyBatis на практикеVitebsk Miniq
 
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)ZFConf Conference
 

Similar to ES2015+: давно пора! (20)

YiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляцииYiiConf: Миграции и инсталляции
YiiConf: Миграции и инсталляции
 
Yii: миграции и инсталляции
Yii: миграции и инсталляцииYii: миграции и инсталляции
Yii: миграции и инсталляции
 
Web internship java script
Web internship   java scriptWeb internship   java script
Web internship java script
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и MinkBehat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Mink
 
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
 
Где кончается react native? / Павел Кондратенко (Rambler&Co)
Где кончается react native? / Павел Кондратенко (Rambler&Co)Где кончается react native? / Павел Кондратенко (Rambler&Co)
Где кончается react native? / Павел Кондратенко (Rambler&Co)
 
Techtalk#8: Design patterns in real life
Techtalk#8: Design patterns in real lifeTechtalk#8: Design patterns in real life
Techtalk#8: Design patterns in real life
 
Take more from Jquery
Take more from JqueryTake more from Jquery
Take more from Jquery
 
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
 
"Жизнь без интернета" Кувалдин Артём, Яндекс
"Жизнь без интернета" Кувалдин Артём, Яндекс"Жизнь без интернета" Кувалдин Артём, Яндекс
"Жизнь без интернета" Кувалдин Артём, Яндекс
 
Превышаем скоросные лимиты с Angular 2
Превышаем скоросные лимиты с Angular 2Превышаем скоросные лимиты с Angular 2
Превышаем скоросные лимиты с Angular 2
 
FPUG Dzyga presentation
FPUG Dzyga presentationFPUG Dzyga presentation
FPUG Dzyga presentation
 
Язык программирования C#
Язык программирования C#Язык программирования C#
Язык программирования C#
 
Как навести порядок в коде вашего web-приложения, Андрей Чебукин
Как навести порядок в коде вашего web-приложения, Андрей Чебукин Как навести порядок в коде вашего web-приложения, Андрей Чебукин
Как навести порядок в коде вашего web-приложения, Андрей Чебукин
 
Making Scalable JavaScript Application
Making Scalable JavaScript ApplicationMaking Scalable JavaScript Application
Making Scalable JavaScript Application
 
Асинхронный JavaScript
Асинхронный JavaScriptАсинхронный JavaScript
Асинхронный JavaScript
 
Aspect Oriented Approach
Aspect Oriented ApproachAspect Oriented Approach
Aspect Oriented Approach
 
Tdd webpack + testem + mocha + chai
Tdd webpack + testem + mocha + chaiTdd webpack + testem + mocha + chai
Tdd webpack + testem + mocha + chai
 
MyBatis на практике
MyBatis на практикеMyBatis на практике
MyBatis на практике
 
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
 

More from Vitebsk Miniq

Runtime compilation and code execution in groovy
Runtime compilation and code execution in groovyRuntime compilation and code execution in groovy
Runtime compilation and code execution in groovyVitebsk Miniq
 
The 5 Laws of Software Estimates
The 5 Laws of Software EstimatesThe 5 Laws of Software Estimates
The 5 Laws of Software EstimatesVitebsk Miniq
 
Latest & Greatest Observability Release 7.9
Latest & Greatest Observability Release 7.9Latest & Greatest Observability Release 7.9
Latest & Greatest Observability Release 7.9Vitebsk Miniq
 
Тестирование Spring-based приложений
Тестирование Spring-based приложенийТестирование Spring-based приложений
Тестирование Spring-based приложенийVitebsk Miniq
 
Семантический поиск - что это, как работает и чем отличается от просто поиска
Семантический поиск - что это, как работает и чем отличается от просто поискаСемантический поиск - что это, как работает и чем отличается от просто поиска
Семантический поиск - что это, как работает и чем отличается от просто поискаVitebsk Miniq
 
Локализационное тестирование - это не только перевод
Локализационное тестирование - это не только переводЛокализационное тестирование - это не только перевод
Локализационное тестирование - это не только переводVitebsk Miniq
 
ISTQB Сертификация тестировщиков: быть или не быть?
ISTQB Сертификация тестировщиков: быть или не быть?ISTQB Сертификация тестировщиков: быть или не быть?
ISTQB Сертификация тестировщиков: быть или не быть?Vitebsk Miniq
 
Apollo GraphQL Federation
Apollo GraphQL FederationApollo GraphQL Federation
Apollo GraphQL FederationVitebsk Miniq
 
Who is a functional tester
Who is a functional testerWho is a functional tester
Who is a functional testerVitebsk Miniq
 
Вперед в прошлое
Вперед в прошлоеВперед в прошлое
Вперед в прошлоеVitebsk Miniq
 
CloudFormation experience
CloudFormation experienceCloudFormation experience
CloudFormation experienceVitebsk Miniq
 
Learning Intelligence: the story of mine
Learning Intelligence: the story of mineLearning Intelligence: the story of mine
Learning Intelligence: the story of mineVitebsk Miniq
 
Как программисты могут спасти мир
Как программисты могут спасти мирКак программисты могут спасти мир
Как программисты могут спасти мирVitebsk Miniq
 
Использование AzureDevOps при разработке микросервисных приложений
Использование AzureDevOps при разработке микросервисных приложенийИспользование AzureDevOps при разработке микросервисных приложений
Использование AzureDevOps при разработке микросервисных приложенийVitebsk Miniq
 
Distributed tracing system in action. Instana Tracing.
Distributed tracing system in action. Instana Tracing.Distributed tracing system in action. Instana Tracing.
Distributed tracing system in action. Instana Tracing.Vitebsk Miniq
 
Насорил - убери!
Насорил - убери!Насорил - убери!
Насорил - убери!Vitebsk Miniq
 
Styled-components. Что? Когда? И зачем?
Styled-components. Что? Когда? И зачем?Styled-components. Что? Когда? И зачем?
Styled-components. Что? Когда? И зачем?Vitebsk Miniq
 
Красные флаги и розовые очки
Красные флаги и розовые очкиКрасные флаги и розовые очки
Красные флаги и розовые очкиVitebsk Miniq
 
CSS. Практика
CSS. ПрактикаCSS. Практика
CSS. ПрактикаVitebsk Miniq
 

More from Vitebsk Miniq (20)

Runtime compilation and code execution in groovy
Runtime compilation and code execution in groovyRuntime compilation and code execution in groovy
Runtime compilation and code execution in groovy
 
The 5 Laws of Software Estimates
The 5 Laws of Software EstimatesThe 5 Laws of Software Estimates
The 5 Laws of Software Estimates
 
Latest & Greatest Observability Release 7.9
Latest & Greatest Observability Release 7.9Latest & Greatest Observability Release 7.9
Latest & Greatest Observability Release 7.9
 
Тестирование Spring-based приложений
Тестирование Spring-based приложенийТестирование Spring-based приложений
Тестирование Spring-based приложений
 
Семантический поиск - что это, как работает и чем отличается от просто поиска
Семантический поиск - что это, как работает и чем отличается от просто поискаСемантический поиск - что это, как работает и чем отличается от просто поиска
Семантический поиск - что это, как работает и чем отличается от просто поиска
 
Локализационное тестирование - это не только перевод
Локализационное тестирование - это не только переводЛокализационное тестирование - это не только перевод
Локализационное тестирование - это не только перевод
 
ISTQB Сертификация тестировщиков: быть или не быть?
ISTQB Сертификация тестировщиков: быть или не быть?ISTQB Сертификация тестировщиков: быть или не быть?
ISTQB Сертификация тестировщиков: быть или не быть?
 
Apollo GraphQL Federation
Apollo GraphQL FederationApollo GraphQL Federation
Apollo GraphQL Federation
 
Who is a functional tester
Who is a functional testerWho is a functional tester
Who is a functional tester
 
Crawling healthy
Crawling healthyCrawling healthy
Crawling healthy
 
Вперед в прошлое
Вперед в прошлоеВперед в прошлое
Вперед в прошлое
 
CloudFormation experience
CloudFormation experienceCloudFormation experience
CloudFormation experience
 
Learning Intelligence: the story of mine
Learning Intelligence: the story of mineLearning Intelligence: the story of mine
Learning Intelligence: the story of mine
 
Как программисты могут спасти мир
Как программисты могут спасти мирКак программисты могут спасти мир
Как программисты могут спасти мир
 
Использование AzureDevOps при разработке микросервисных приложений
Использование AzureDevOps при разработке микросервисных приложенийИспользование AzureDevOps при разработке микросервисных приложений
Использование AzureDevOps при разработке микросервисных приложений
 
Distributed tracing system in action. Instana Tracing.
Distributed tracing system in action. Instana Tracing.Distributed tracing system in action. Instana Tracing.
Distributed tracing system in action. Instana Tracing.
 
Насорил - убери!
Насорил - убери!Насорил - убери!
Насорил - убери!
 
Styled-components. Что? Когда? И зачем?
Styled-components. Что? Когда? И зачем?Styled-components. Что? Когда? И зачем?
Styled-components. Что? Когда? И зачем?
 
Красные флаги и розовые очки
Красные флаги и розовые очкиКрасные флаги и розовые очки
Красные флаги и розовые очки
 
CSS. Практика
CSS. ПрактикаCSS. Практика
CSS. Практика
 

ES2015+: давно пора!

  • 2. Про ES Почему ECMA? Ecma International - организация, которая занимается стандартизацией информационных и коммуникационных технологий. ECMAScript - стандарт, основа для создания скриптовых языков. Таких как: JScript, ActionScript, JavaScript (браузеры, NodeJS, ...)
  • 3. Немного скучной истории 1995 - Появление JavaScript 1997 - ES1 1998 - ES2, минорные правки 1999 - ES3 2008 - ES4 (так и не вышел) 2009 - ES5 2015 - ES2015
  • 4. Что сейчас со стандартом Ежегодные релизы Фичи проходят несколько стадий: ● Stage 0 Proposals ● Active Proposals (stage 1-3) ● Finished Proposals ● Inactive Proposals Готовые фичи входят в стандарт Браузеры не успевают. Некоторые разработчики тоже :)
  • 6. 1. let & const - замена var Область видимости - блок {} (if, for, etc.), а не функция let a = 5; if (true) { let a = 10; console.log(a); // 10 внутри блока } console.log(a); // 5 снаружи блока var a = 5; if (true) { var a = 10; console.log(a); // 10 внутри блока } console.log(a); // 10 снаружи блока
  • 7. 1. let & const - замена var Нет всплытия (hoisting) console.log(a); // error! let a = 5; console.log(a); // undefined var a = 5;
  • 8. 1. let & const - замена var Константы const a = 42; a = 0; // error! const a = { value: 0 } a.value = 42; // ok a = 'new value'; // error!
  • 9. 2. Литералы объектов Свойства let eventName = 'miniq'; let city = 'Vitebsk'; let conference = { eventName, city, getCity() { return this.city; } }; //эквивалентно eventName: eventName, city: city, getCity: function() { return this.city; }
  • 10. 2. Литералы объектов Свойства let eventName = 'miniq'; let city = 'Vitebsk'; let conference = { eventName, city, getCity() { return this.city; } }; //эквивалентно eventName: eventName, city: city, getCity: function() { return this.city; }
  • 11. 2. Литералы объектов [вычисляемые имена свойств] let eventName = 'miniq'; let city = 'Vitebsk'; let conference = { eventName, city, [city + '-17']: guestsCount, getCity() { return this.city; } }; conference[city + '-17'] = guestsCount;
  • 12. 2. Литералы объектов Ссылка на прототип __proto__ let eventName = 'miniq'; let city = 'Vitebsk'; let conference = { __proto__: Event, eventName, city, [city + '-17']: guestsCount, getCity() { return this.city; } };
  • 13. 2. Литералы объектов Доступ к родительским свойствам через super let eventName = 'miniq'; let city = 'Vitebsk'; let conference = { __proto__: Event, eventName, city, [city + '-17']: guestsCount, getCity() { return this.city; }, registerAttendee() { super.registerPerson(); } }; ‘Event.prototype.registerPerson’ в контексте conference
  • 14. 3. Деструктурирующее присваивание Объекты $.get( '/miniq/2017', ( response ) => { {time, date, guestsCount} = response; //... }); $.get( '/miniq/2017', ( response ) => { {guestsCount, ...dateAndTime} = response; //... }); dateAndTime = { date: '23.03.2017', time: '19:00' } { guestsCount: 9001, date: '23.03.2017', time: '19:00' }
  • 15. 3. Деструктурирующее присваивание Объекты, rest-параметры $.get( '/miniq/2017', ( response ) => { {time, date, guestsCount} = response; //... }); $.get( '/miniq/2017', ( response ) => { {guestsCount, ...dateAndTime} = response; //... }); dateAndTime = { date: '23.03.2017', time: '19:00' } { guestsCount: 9001, date: '23.03.2017', time: '19:00' }
  • 16. 3. Деструктурирующее присваивание Объекты, деструктурирование объекта-параметра $.get( '/miniq/2017', ( {guestsCount, date, time} ) => { //... }); $.get( '/miniq/2017', ( {guestsCount, ...dateAndTime} ) => { //... });
  • 17. 3. Деструктурирующее присваивание Массивы let miniq = ['Tech debt', 'ES2015+', 'Competitions', 'coffee', 'good mood']; function showInfo([firstTheme, secondTheme, thirdTheme, ...rest]) { console.log(secondTheme); console.log(rest.join(',')); } showInfo(miniq); // ES2015+ // coffee,good mood
  • 18. 3. Деструктурирующее присваивание Массивы let miniq = ['Tech debt', 'ES2015+', 'Competitions', 'coffee', 'good mood']; function showInfo([firstTheme, secondTheme, thirdTheme, ...rest]) { console.log(secondTheme); console.log(rest.join(',')); } showInfo(miniq); // ES2015+ // coffee,good mood
  • 19. 4. Строки Строки-шаблоны let attendee = 'Ivan'; function getNextNumber(){/*...*/}; console.log(`Hi, ${attendee}! Your number is ${getNextNumber()}!`); Многострочные литералы let multiline = 'Yes, now it’s possible'; ` - это backtick, он живет на кнопке “ё” и помогает делать:
  • 20. 4. Строки Строки-шаблоны let attendee = 'Ivan'; function getNextNumber(){/*...*/}; console.log(`Hi, ${attendee}! Your number is ${getNextNumber()}!`); Многострочные строки let multiline = 'Yes, now it’s possible'; ` - это backtick, он живет на кнопке “ё” и помогает делать:
  • 22. 5. Стрелочные функции Сохранение контекста let miniq = { greeting: 'Hi there', startTimer: function() { setTimeout(function() { console.log(this.greeting); //this === window }, time); } } let miniq = { greeting: 'Hi there', startTimer: () => { setTimeout(() => { console.log(this.greeting); //this === miniq. Прощай, self = this! }, time); } }
  • 24. 6. Параметры по-умолчанию function getHeadline(title, date, place){ title = title || 'Miniq'; date = date || '23.03.2017'; place = place || 'Vitebsk'; console.log(`${title}, ${date} in ${place}`); } function getHeadline(title = 'Miniq', date = '23.03.2017', place = 'Vitebsk'){ console.log(`${title}, ${date} in ${place}`); }
  • 25. 7. Классы Как было: function Point(x, y) { this.x = x; this.y = y; } Point.prototype.toString = function() { return `(${this.x}, ${this.y})`; }
  • 26. 7. Классы Как наследовались: function Point(x, y) {...} function ColorPoint(x, y, color) { this.x = x; this.y = y; this.color = color; } ColorPoint.prototype = Object.create(Point.prototype); ColorPoint.prototype.constructor = ColorPoint; ColorPoint.prototype.toStringWithColor = function() { return `(${this.x}, ${this.y}) - ${this.color}`; }
  • 27. 7. Классы Как стало: class Point { constructor(x, y) { this.x = x; this.y = y; } toString() { return `(${this.x}, ${this.y})`; } static get hello() { return 'Hi, I'm a point!' } }
  • 28. 7. Классы Наследование: class Point {...} class ColorPoint extends Point { constructor(x, y, color) { super(x, y); this.color = color; } toString() { return super.toString() + ` - ${this.color}`; } }
  • 29. 7. Классы Наследование: class Point {...} class ColorPoint extends Point { constructor(x, y, color) { super(x, y); this.color = color; } toString() { return super.toString() + ` - ${this.color}`; } }
  • 30. 8. Модули Как было без модулей? ● Проблемы с порядком загрузки ● “Сшивание” файлов ● Общая область видимости ● Все в одной куче Плохо, короче.
  • 31. 8. Модули “Стройка встала, на стройке паралич: Прораб изобретает свой собственный кирпич” ● Module pattern ● AMD (RequireJS) ● CommonJS ● UMD
  • 32. 8. Модули Стандартное решение: import & export // event-utility.js const config = {/*...*/} export function sendInvitation(person) {/*...*/} export function registerSomeone(person) {/*...*/}
  • 33. 8. Модули // event-utility.js const config = {/*...*/} export function sendInvitation(person) {/*...*/} export function registerSomeone(person) {/*...*/} // miniq-app.js // импорт одной из функций import {sendInvitation} from './event-utility'; // импорт функции в переменную с другим именем import {registerSomeone as register} from './event-utility'; // импорт всего содержимого в объект import * as util from './event-utility'; // ... export class MiniqApp {/*...*/}
  • 34. 8. Модули // event-utility.js const config = {/*...*/} export function sendInvitation(person) {/*...*/} export function registerSomeone(person) {/*...*/} // miniq-app.js // импорт одной из функций import {sendInvitation} from './event-utility'; // импорт функции в переменную с другим именем import {registerSomeone as register} from './event-utility'; // импорт всего содержимого в объект import * as util from './event-utility'; // ... export class MiniqApp {/*...*/}
  • 35. 8. Модули // event-utility.js const config = {/*...*/} export function sendInvitation(person) {/*...*/} export function registerSomeone(person) {/*...*/} // miniq-app.js // импорт одной из функций import {sendInvitation} from './event-utility'; // импорт функции в переменную с другим именем import {registerSomeone as register} from './event-utility'; // импорт всего содержимого в объект import * as util from './event-utility'; // ... export class MiniqApp {/*...*/}
  • 36. 8. Модули // event-utility.js const config = {/*...*/} export function sendInvitation(person) {/*...*/} export function registerSomeone(person) {/*...*/} // miniq-app.js // импорт одной из функций import {sendInvitation} from './event-utility'; // импорт функции в переменную с другим именем import {registerSomeone as register} from './event-utility'; // импорт всего содержимого в объект import * as util from './event-utility'; // ... export class MiniqApp {/*...*/}
  • 37. 8. Модули // miniq-app.js import {sendInvitation} from './event-utility'; import {sendInvitation as invite} from './event-utility'; import * as util from './event-utility'; // ... export class MiniqApp {/*...*/} // app.js import {MiniqApp} from './miniq-app';
  • 38. 8. Модули // miniq-app.js import {sendInvitation} from './event-utility'; import {sendInvitation as invite} from './event-utility'; import * as util from './event-utility'; // ... export default class MiniqApp {/*...*/} // app.js import Miniq from './miniq-app';
  • 39. И это еще не все!.. ● Promises ● Set, Map, Weakset & Weakmap ● Итераторы, for … of ● Генераторы ● async/await ● Symbol ● Proxie ● Unicode ● ...
  • 40. И как этим воспользоваться? Часть уже есть в браузерах. https://kangax.github.io/compat-table/es6/
  • 41. И как этим воспользоваться? Для модулей понадобится сборщик / загрузчик: ● Webpack (мощный, но требует Webpack Ops) ● Rollup (попроще) ● SystemJS Для остального - транспайлеры ● Babel (остальные не нужны) ● Traceur
  • 42. И как этим воспользоваться? Babel Как часть процесса сборки: module: { rules: [ { test: /.js$/, exclude: /(node_modules)/, use: { loader: 'babel-loader', options: { presets: ['env'] } }
  • 43. И как этим воспользоваться? Babel В консоли: babel script.js --out-file script-compiled.js Или прямо на странице: <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
  • 44. Зачем все это? Плюсы: ● Улучшают читаемость ● Упрощают некоторые задачи ● Делают прежде неясные моменты более четкими Минусы: ● Непривычно ● Усложнение процесса сборки
  • 45. We need to go deeper! ES6 in Depth: https://ponyfoo.com/articles/tagged/es6-in-depth Современные возможности ES-2015: https://learn.javascript.ru/es-modern Таблицы поддержки новых возможностей https://kangax.github.io/compat-table/es6/ http://node.green/