ecmascript 6 — будущее javascript

Post on 02-Dec-2014

366 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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

Будущее JavaScript

2013

Раньше

Сейчас

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

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

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

ObjectStringArrayNumberMath

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

String.fromCodePoint

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

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

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

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

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

18

es6-shim

ECMAScript-6

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

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

Новые методы базовых объектов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

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

Array.fromArray.of

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

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

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

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

Number.isNaNNumber.isFiniteNumber.isIntegerNumber.toInteger

Number.prototype.clz

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

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

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

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

Коллекции

Коллекции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

Коллекции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

Коллекции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

Коллекции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

Коллекции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

КоллекцииSet

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

11

24

29

es6-shim

ECMAScript-6

harmony-collections

КоллекцииSet

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

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

11

24

29

es6-shim

ECMAScript-6

harmony-collections

Коллекции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

Коллекции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

Коллекции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

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

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

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

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

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

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

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

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

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

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

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

Функции

6 000 000 °

Генераторы

Генераторы

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

Генераторы

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

Классы

Классы

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

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

google traceur

es6ify

harmonizr

Классы

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

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

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

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

google traceur

es6ify

harmonizr

Классы

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

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

google traceur

es6ify

harmonizr

Классы

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

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

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

letconstMapSet

WeakMap

simonenko simonenko simonenko.su

Спасибо.

top related