ecmascript harmony

65
ECMAScript Harmony Илья Пухальский, EPAM Systems ИЛИ ПОЧЕМУ Я ВЕРЮ В БУДУЩЕЕ JAVASCRIPT

Upload: fdconf

Post on 28-Nov-2014

783 views

Category:

Technology


4 download

DESCRIPTION

by Ilya Pukhalski on Frontend DEV Conf'13 bit.ly/Ilya_Pukhalski

TRANSCRIPT

Page 1: ECMAscript harmony

ECMAScript  Harmony

Илья  Пухальский,EPAM  Systems

ИЛИ

ПОЧЕМУ Я ВЕРЮ В

БУДУЩЕЕ JAVASCRIPT

Page 2: ECMAscript harmony

@witchfinderx

2

Илья Пухальский,EPAM Mobile Competency Center

Page 3: ECMAscript harmony

На повестке дня

3

Page 4: ECMAscript harmony

1. Как самый непонятый язык в мире стал самымпопулярным

2. Чем плох JavaScript?

3. Новые возможности

4. Взгляд в будущее

5. Наша миссия

4

Page 5: ECMAscript harmony

Чего не будет?

5

Page 6: ECMAscript harmony

1. Объектная модель браузера (DOM)

2. Объектная модель документа (BOM)

3. "Новых фишечек HTML5"

6

Page 7: ECMAscript harmony

История JavaScript в картинках

7

Page 9: ECMAscript harmony

9

TC39 — технический коммитет ECMA-262

TC39

Page 10: ECMAscript harmony

10

ECMAScript — это язык.JavaScript, JScript и даже ActionScript — диалекты.

Википедия

Page 11: ECMAscript harmony

11

JS 1.0 (Mocha / LiveScript)

Начало 1996-гоNetscape 2.0, Брендон Айк

Page 12: ECMAscript harmony

12

Передача на стандартизацию

1996ECMA International

Page 13: ECMAscript harmony

13

Портирование JS 1.0 (JScript, VBScript)

Июль 1996-гоIE 3.0

Page 14: ECMAscript harmony

14

JS 1.1

Август 1996-гоNetscape 3.0 + DOM Level 0

Page 15: ECMAscript harmony

15

ECMA-262 1.0

Июнь 1996-гоECMA International

Page 16: ECMAscript harmony

16

JS 1.3 (ECMA-262 1.0 и 2.0)

Июнь 1997-гоNetscape 4.0, DHTML

Page 17: ECMAscript harmony

17

JS 1.4 (LiveWire)

1997Netscape Server-side JavaScript

<H1>

<server> // Here we use the same technique to construct a heading on the page. if ( request.deptno != null ) write("Department " + request.deptno + " Staff"); else write("All Staff");</server>

</H1>

<server> // Call a programmer-defined function (see below) to verify the database // connection. Note that this ckDatabaseConnected function may redirect to a // login page; if that happens, we want to return here once the user logs in // successfully. So we have to send the URL as a parameter.

if ( request.deptno == null ) ckDatabaseConnected("emps.html"); else ckDatabaseConnected("emps.html" + "?deptno=" + request.deptno);</server>

Page 18: ECMAscript harmony

18

ECMA-262 2.0 (ISO/IEC 16262)

Июнь 1998-гоECMA International

Page 19: ECMAscript harmony

19

ECMA-262 3.0

Декабрь 1999-гоECMA International

Page 20: ECMAscript harmony

20

JS 1.5 (ECMA-262 3.0)

С ноября 2000-гоNetscape 6.0, FireFox 1.0, IE 5.5-8.0 (JScript 5.5-8.0), Opera 7.5-11.50,

Safari 3-5, Chrome 1-10.0.666

Page 21: ECMAscript harmony

21

— Брендон Айк

«Считайте, что JavaScript спас вас «от VBScript»

Page 22: ECMAscript harmony

22

ECMA-262 4.0

НЕ ВЫПУЩЕНАпо политическим причинам

Page 23: ECMAscript harmony

23

ECMA-262 5.0

Декабрь 2009-гоECMA International

Page 24: ECMAscript harmony

24

JS 1.6-1.8.1

С ноября 2005-го по июнь 2009-гоFireFox 1.5-3.6

Page 25: ECMAscript harmony

25

JS 1.8.2 (ECMA-262 5.0 совместимость)

С ноября 2000-гоFireFox 4+, IE 9+, Opera 11.60+

Page 26: ECMAscript harmony

26

ECMA-262 5.1 (ISO/IEC 16262:2011)

Июнь 2011-гоECMA International

Page 27: ECMAscript harmony

27

ECMA-262 6 / ECMAScript Harmony

Декабрь 2013-гоECMA International

Page 28: ECMAscript harmony

Так быстро?

28

Page 29: ECMAscript harmony

29

JavaScript уже не тот

Page 30: ECMAscript harmony

30

Он везде

Page 31: ECMAscript harmony

Чем плох JavaScript?

31

Page 32: ECMAscript harmony

32

1. Единый глобальный неймспейс

2. Прототипное наследование сложное и ресурсоемкое

3. Precision проблемы

4. NaN

5. Проблемы с регулярными выражениями

6. =, ==, ===

7. for ... in

8. Ваш вариант

Page 33: ECMAscript harmony

33

— Брендон Айк

«Простите, времени было мало...«Я сделаю лучше в следующей жизни»

Page 34: ECMAscript harmony

Новые возможности

34

Page 35: ECMAscript harmony

35

Новое в API

Page 36: ECMAscript harmony

36

var arr = new Array(1, 2, 3, 8, 12);

arr.find(function(n) {return n % 2;}); // [2, 8, 12]arr.findIndex(function(n) {return n / 2 === 4;}); // 3

Массивы

1. Array.prototype.find()

2. Array.prototype.findIndex()1. проверить

Page 37: ECMAscript harmony

37

Строки1. String.prototype.contains()

2. String.prototype.repeat()

3. String.prototype.startsWith()

4. String.prototype.endsWith()

'string'.startsWith('s'); // true'string'.endsWith('s'); // false'ecmascript harmony'.contains('harmony'); // true'keep moving '.repeat(3); // keep moving keep moving

Page 38: ECMAscript harmony

38

Новое в Math

1. Math.sign()

2. Math.log10(), Math.log2(), Math.log1p(), Math.expm1()

3. Math.cosh(), Math.sinh(), Math.tanh()

4. Math.acosh(), Math.asinh(), Math.atanh()

5. Math.hypot(), Math.trunc()

// Варианты результата // в зависимости от знака: 1, 0 и -1Math.sign(365) // 1

Page 39: ECMAscript harmony

39

Новое в Number

1. Number.isNaN()

2. Number.toInteger()

3. Number.isInteger()

4. Number.isFinite()

5. Number.prototype.clz()

Page 40: ECMAscript harmony

40

Object

1. Object.is()

2. Object.assign()

3. Object.mixin()

Object.is(NaN, NaN); // trueObject.is(0, -0); // falseNaN === NaN; // false0 === -0; // true

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

// {a: 1, b: getter}Object.mixin( {a: 1}, {get b: function() {return 2}});

Page 41: ECMAscript harmony

41

Object.observevar tweet = { text: '#frontendconf just started. Enjoy!', username: 'witchfinderx', sent: false};

Object.observe(tweet, function(changes) { changes.forEach(function(change, i) { console.log(change); });});

// Изменяем, добавляем и удаляем свойствоtweet.text = 'So boring. Waiting for a coffee...'; tweet.date = new Date();delete tweet.completed;

Page 42: ECMAscript harmony

42

function foo(a, b = 10) {}function foo(a = 'Frontend Conf', b = 20) {}function foo(a, b = 30, me = this) {}

Стандартные значения параметров функции

Page 43: ECMAscript harmony

43

var a = 1, b = 0; let (a = a * 10, b = 5) { console.log(a + b); // 15 }

console.log(a + b); // 1

Блочная область видимости

Page 44: ECMAscript harmony

44

let data = new Map();data.set('key', 'key'.length); // key 3data.get('key'); // 3data.size(); // 1data.has('key'); // truedata.delete('key'); // truedata.has('key'); // false

Maps

Page 45: ECMAscript harmony

45

let data = new Set([1, 2, 3]);.s.has(5); // falses.add(5);s.has(5); // trues.delete(5); // trues.has(5); // false

Sets

Page 46: ECMAscript harmony

46

let wdata = new WeakMap();wdata.set('key', 'key'.length); // TypeError: Invalid value used as weak map key

wdata.has('key'); // TypeError: Invalid value used as weak map key

let wmk = {};wdata.set(wmk, 'value'); // wmk 'value'wdata.get(wmk); // 'value'wdata.has(wmk); // truewdata.delete(wmk); // truewdata.has(wmk); // false

WeakMaps

Page 47: ECMAscript harmony

47

Модули

Page 48: ECMAscript harmony

48

module UniverseTest {};module Universe { module MilkyWay {} };module MilkyWay = 'Universe/MilkyWay';module SolarSystem = Universe.MilkyWay.SolarSystem;

module MySystem = SolarSystem;

Определение

Page 49: ECMAscript harmony

49

module Car { // приватные var licensePlateNo = '556-343'; // публичные export function drive(speed, direction) { console.log('details:', speed, direction); } export module engine{ export function check() { } } export var miles = 5000; export var color = 'silver';};

Экспорт / Публичные св-ва и методы

Page 50: ECMAscript harmony

50

import drive from Car;import {drive, miles} from Car;

Импорт

Page 51: ECMAscript harmony

51

// load(moduleURL, callback, errorCallback)Loader.load('car.js', function(car) { console.log(car.drive(500, 'north'));}, function(err) { console.log('Error:' + err);});

Загрузчик модулей

Page 52: ECMAscript harmony

52

Классы

Page 53: ECMAscript harmony

53

module widgets { // ... class DropDownButton extends Widget { constructor(attributes) { super(attributes); this.buildUI(); } buildUI() { this.domNode.onclick = function(){ // ... }; } }}

Пример использования

Page 54: ECMAscript harmony

54

var widgets = (function(global) { // ... function DropDownButton(attributes) { Widget.call(this, attributes); this.buildUI(); } DropDownButton.prototype =

Object.create(Widget.prototype, { constructor: { value: DropDownButton }, buildUI: { value: function(e) { this.domNode.onclick = function(e) { // ... } } } });})(this);

class == function

Page 55: ECMAscript harmony

55

А как же AMD?

Page 56: ECMAscript harmony

56

— Джеймс Бурке

«Я хочу, чтобы AMD и RequireJS остались в «прошлом... Сам язык будет покрывать 80% «функционала RequireJS, как минимум для «браузера»

Page 57: ECMAscript harmony

57

Поддержка возможностей ES 5-6 на сегодня

ECMAScript 5-6: таблицы совместимости

Page 58: ECMAscript harmony

Будущее

58

Page 59: ECMAscript harmony

59

ECMA-262 7.0

1. Promises

2. Перегрузка операторов

3. Типажи

4. Ваши предложения?

Page 60: ECMAscript harmony

Миссия

60

Page 61: ECMAscript harmony

61

Я ♥

Page 63: ECMAscript harmony

Вопросы?

63