81
Алексей Симоненко технический директор Serenity Будущее JavaScript 2013

ECMAScript 6 — будущее JavaScript

Embed Size (px)

DESCRIPTION

Презентация для технического директора маркетингового агентства Serenity Алексея Симоненко. История появления ECMAScript Harmony. Что ждёт JavaScript после внедрения ES6. Что можно пробовать уже сейчас.

Citation preview

Page 1: ECMAScript 6 — будущее JavaScript

Алексей Симоненкотехнический директор Serenity

Будущее JavaScript

2013

Page 2: ECMAScript 6 — будущее JavaScript

Раньше

Page 3: ECMAScript 6 — будущее JavaScript

Сейчас

Page 4: ECMAScript 6 — будущее JavaScript

12 лет между последними большими изменениями спецификации JavaScript

Page 5: ECMAScript 6 — будущее JavaScript

12 лет между последними большими изменениями спецификации JavaScript

Новые методы базовых объектов

ObjectStringArrayNumberMath

Page 6: ECMAScript 6 — будущее JavaScript

Новые методы базовых объектовString

String.fromCodePoint

String.prototype.containsString.prototype.startsWithString.prototype.endsWithString.prototype.repeatString.prototype.codePointAtString.prototype.toArray

Page 7: ECMAScript 6 — будущее JavaScript

Новые методы базовых объектовString

'too much'.contains('too');// true

'too much'.startsWith('t');// true

'too much'.endsWith('t');// false

18

es6-shim

ECMAScript-6

Page 8: ECMAScript 6 — будущее JavaScript

Новые методы базовых объектовObject

Object.isObject.assignObject.mixinObject.getOwnPropertyDescriptorsObject.getPropertyDescriptorObject.getPropertyNamesObject.setPrototypeOf

Page 10: ECMAScript 6 — будущее JavaScript

Новые методы базовых объектовObject

Object.assign({a: 1, b: 3}, {b: 2, c: 3});// {a: 1, b: 2, c: 3}

Object.is(NaN, NaN);// true

23

19

15

es6-shim

ECMAScript-6

Page 11: ECMAScript 6 — будущее JavaScript

Новые методы базовых объектовArray

Array.fromArray.of

Array.prototype.findArray.prototype.findIndexArray.prototype.fill

Page 13: ECMAScript 6 — будущее JavaScript

Новые методы базовых объектовArray

Нет метода Array.prototype.unique()

Page 14: ECMAScript 6 — будущее JavaScript

Новые методы базовых объектовNumber

Number.isNaNNumber.isFiniteNumber.isIntegerNumber.toInteger

Number.prototype.clz

Page 15: ECMAScript 6 — будущее JavaScript

Новые методы базовых объектовMath

Math.signMath.imulMath.log1pMath.log2Math.log10Math.expm1Math.froundMath.hypot

Math.truncMath.coshMath.sinhMath.tanhMath.acoshMath.asinhMath.atanh

Page 16: ECMAScript 6 — будущее JavaScript

Область видимости

Page 23: ECMAScript 6 — будущее JavaScript

Коллекции

Page 24: ECMAScript 6 — будущее JavaScript

КоллекцииMap

let data = new Map();

data.set('key', 100);data.set(666, true);data.set(undefined, 'some text');

11

18

29

es6-shim

ECMAScript-6

harmony-collections

Page 25: ECMAScript 6 — будущее JavaScript

КоллекцииMap

let data = new Map();

data.set('key', 100);data.set(666, true);data.set(undefined, 'some text');

let fn = function() { console.log('inside?'); }data.set(fn, 'function key');

11

18

29

es6-shim

ECMAScript-6

harmony-collections

Page 26: ECMAScript 6 — будущее JavaScript

КоллекцииMap

let data = new Map();

data.set('key', 100);data.set(666, true);data.set(undefined, 'some text');

let fn = function() { console.log('inside?'); }data.set(fn, 'function key');

data.has('keys'); // falsedata.has(undefined); // true

11

18

29

es6-shim

ECMAScript-6

harmony-collections

Page 27: ECMAScript 6 — будущее JavaScript

КоллекцииMap

let data = new Map();

data.set('key', 100);data.set(666, true);data.set(undefined, 'some text');

let fn = function() { console.log('inside?'); }data.set(fn, 'function key');

data.has('keys'); // falsedata.has(undefined); // true

data.delete(undefined);data.has(undefined); // false

11

18

29

es6-shim

ECMAScript-6

harmony-collections

Page 28: ECMAScript 6 — будущее JavaScript

КоллекцииMap

let data = new Map();

data.set('key', 100);data.set(666, true);data.set(undefined, 'some text');

let fn = function() { console.log('inside?'); }data.set(fn, 'function key');

data.has('keys'); // falsedata.has(undefined); // true

data.delete(undefined);data.has(undefined); // false

data.get(fn); // "function key"

11

18

29

es6-shim

ECMAScript-6

harmony-collections

Page 29: ECMAScript 6 — будущее JavaScript

КоллекцииSet

let data = new Set([1, 3, 5, 3]);

11

24

29

es6-shim

ECMAScript-6

harmony-collections

Page 30: ECMAScript 6 — будущее JavaScript

КоллекцииSet

let data = new Set([1, 3, 5, 3]);

data.add(3);data.add(7);

11

24

29

es6-shim

ECMAScript-6

harmony-collections

Page 31: ECMAScript 6 — будущее JavaScript

КоллекцииSet

let data = new Set([1, 3, 5, 3]);

data.add(3);data.add(7);

data.has(3); // truedata.has(9); // false

11

24

29

es6-shim

ECMAScript-6

harmony-collections

Page 32: ECMAScript 6 — будущее JavaScript

КоллекцииSet

let data = new Set([1, 3, 5, 3]);

data.add(3);data.add(7);

data.has(3); // truedata.has(9); // false

data.delete(3);data.has(3); // false

11

24

29

es6-shim

ECMAScript-6

harmony-collections

Page 36: ECMAScript 6 — будущее JavaScript

Коллекцииfor-of

let data = new Map();

data.set('404fest', {'involve': true, 'speaker': true});data.set('wstdays', {'involve': false, 'speaker': false});data.set('dconf', {'involve': true, 'speaker': false});

for (let conf of data) { console.log(conf);}

// ["404fest", {"involve": true, "speaker": true}]// ["wstdays", {"involve": false, "speaker": false}]// ["dconf", {"involve": true, "speaker": false}]

18

google traceur

es6ify

Page 40: ECMAScript 6 — будущее JavaScript

Странные конструкции

Page 50: ECMAScript 6 — будущее JavaScript

let data = new Map();

data.set('404fest', {'involve': true, 'speaker': true});data.set('wstdays', {'involve': false, 'speaker': false});data.set('dconf', {'involve': true, 'speaker': false});

for (let [name, {involve}] of data) { console.log(name, involve);}

// "404fest", true// "wstdays", false// "dconf", true

Странные конструкции

Page 52: ECMAScript 6 — будущее JavaScript

let params = [2013, 9, 13, 15, 30];let date = new Date(...params);

// Sun Oct 13 2013 15:30:00 GMT+0400 (MSK)

let speak = ['#404fest', '#dconf'];let tags = ['#fronteers13', ...speak, '#wstdays'];

// ["#fronteers13", "#404fest", "#dconf", "#wstdays"]

Странные конструкцииSpread operator 16

google traceur

es6ify

Page 54: ECMAScript 6 — будущее JavaScript

Странные конструкции

Нет метода Array.prototype.unique()?

Сделаем его сами

Page 55: ECMAScript 6 — будущее JavaScript

let data = [ 10, 20, 10, 35, 'S', 'Y', 'S', 35, 10, 'S'];

let unique = [...new Set(data)];

// [10, 20, 35, "S", "Y"]

Странные конструкции

Page 56: ECMAScript 6 — будущее JavaScript

Функции

6 000 000 °

Page 64: ECMAScript 6 — будущее JavaScript

Генераторы

Page 66: ECMAScript 6 — будущее JavaScript

Генераторы

function* compute(degree, max) { var a = 1;

for (let i = 0; i < max; i++) { yield a; a = a * degree; }}

let gen = compute(2, 3);

gen.next(); // { value: 1, done: false }gen.next(); // { value: 2, done: false }gen.next(); // { value: 4, done: false }

26

29

google traceur

es6ify

Page 67: ECMAScript 6 — будущее JavaScript

Генераторы

function* compute(degree, max) { var a = 1;

for (let i = 0; i < max; i++) { yield a; a = a * degree; }}

let gen = compute(2, 3);

gen.next(); // { value: 1, done: false }gen.next(); // { value: 2, done: false }gen.next(); // { value: 4, done: false }

gen.next(); // { value: undefined, done: true }

26

29

google traceur

es6ify

Page 74: ECMAScript 6 — будущее JavaScript

Классы

Page 75: ECMAScript 6 — будущее JavaScript

Классы

class Employee { constructor(title) { this.title = title; }

who() { console.log(this.title); }}

google traceur

es6ify

harmonizr

Page 76: ECMAScript 6 — будущее JavaScript

Классы

class Employee { constructor(title) { this.title = title; }

who() { console.log(this.title); }}

let ryan = new Employee('Райан Стоун');ryan.who();

// Райан Стоун

google traceur

es6ify

harmonizr

Page 77: ECMAScript 6 — будущее JavaScript

Классы

class Chief extends Employee { constructor(firstname, surname, role) { super(firstname + ' ' + surname); this.role = role; }

fire(person) { person.dismiss(); }}

google traceur

es6ify

harmonizr

Page 78: ECMAScript 6 — будущее JavaScript

Классы

class Chief extends Employee { constructor(firstname, surname, role) { super(firstname + ' ' + surname); this.role = role; }

fire(person) { person.dismiss(); }}

let mat = new Chief('Мэтт', 'Ковальски', 'owner');mat.who();

// Мэтт Ковальски

google traceur

es6ify

harmonizr

Page 79: ECMAScript 6 — будущее JavaScript

Ответственный за поддержку стандартов

Page 80: ECMAScript 6 — будущее JavaScript

Ответственный за поддержку стандартов

letconstMapSet

WeakMap

Page 81: ECMAScript 6 — будущее JavaScript

simonenko simonenko simonenko.su

Спасибо.