ecmascript 6 — будущее javascript

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

Upload: alexey-simonenko

Post on 02-Dec-2014

373 views

Category:

Technology


3 download

DESCRIPTION

Способы применения JavaScript сильно изменились за последнее время. Но сам язык начал меняться только сейчас. Я расскажу вам, что нового нас ожидает в ECMAScript 6. Вот несколько тезисов: — новые методы базовых объектов, — управление областью видимости, — работа с коллекциями, — мой любимый «…» префикс, — генераторы, — классы. И, конечно, не забуду рассказать, что из этого можно использовать уже сейчас.

TRANSCRIPT

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 73: ECMAScript 6 — будущее JavaScript

Классы

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

Классы

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

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

google traceur

es6ify

harmonizr

Page 75: 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 76: 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 77: 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 78: ECMAScript 6 — будущее JavaScript

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

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

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

letconstMapSet

WeakMap

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

simonenko simonenko simonenko.su

Спасибо.