|
| 1 | +# ES-2015 сейчас |
| 2 | + |
| 3 | +[Стандарт ES-2015](http://www.ecma-international.org/publications/standards/Ecma-262.htm) был принят в июне 2015. Пока что большинство браузеров реализуют его частично, текущее состояние реализации различных возможностей можно посмотреть здесь: [](https://kangax.github.io/compat-table/es6/), поэтому в этом учебнике ему выделена отдельная секция. |
| 4 | + |
| 5 | +Когда стандарт будет поддерживаться почти целиком везде, то весь учебник будет обновлён в соответствии с ним. |
| 6 | + |
| 7 | +Пока же, чтобы писать код на ES-2015, есть следующие варианты. |
| 8 | + |
| 9 | +## Конкретный движок JS |
| 10 | + |
| 11 | +Самое простое -- это когда нужен один конкретный движок JS, например V8 (Chrome). |
| 12 | + |
| 13 | +Тогда можно использовать только то, что поддерживается именно в нём. Заметим, что в V8 большинство возможностей ES-2015 поддерживаются только при включённом `use strict`. |
| 14 | + |
| 15 | +При разработке на Node.JS обычно так и делают. Если же нужна кросс-браузерная поддержка, то этот вариант не подойдёт. |
| 16 | + |
| 17 | +## Babel.JS |
| 18 | + |
| 19 | +[Babel.JS](https://babeljs.io) -- это [транспайлер](https://en.wikipedia.org/wiki/Source-to-source_compiler), переписывающий код на ES-2015 в код на предыдущем стандарте ES5. |
| 20 | + |
| 21 | +Он состоит из двух частей: |
| 22 | + |
| 23 | +<ol> |
| 24 | +<li>Собственно транспайлер, который переписывает код.</li> |
| 25 | +<li>Полифилл, который добавляет методы `Array.from`, `String.prototype.repeat` и другие.</li> |
| 26 | +</ol> |
| 27 | + |
| 28 | +На странице [](https://babeljs.io/repl/) можно поэкспериментировать с транспайлером: слева вводится код в ES-2015, а справа появляется результат его преобразования в ES5. |
| 29 | + |
| 30 | +Обычно Babel.JS работает на сервере в составе системы сборки JS-кода (например [webpack](http://webpack.github.io/) или [brunch](http://brunch.io/)) и автоматически переписывает весь код в ES5. |
| 31 | + |
| 32 | +Настройка такой конвертации тривиальна, единственно -- нужно поднять саму систему сборки, а добавить к ней Babel легко, плагины есть к любой из них. |
| 33 | + |
| 34 | +Если же хочется "поиграться", то можно использовать и браузерный вариант Babel. |
| 35 | + |
| 36 | +Это выглядит так: |
| 37 | + |
| 38 | +```html |
| 39 | +<!--+ run --> |
| 40 | +*!* |
| 41 | +<!-- browser.js лежит на моём сервере, не надо брать с него --> |
| 42 | +<script src="https://js.cx/babel-core/browser.min.js"></script> |
| 43 | +*/!* |
| 44 | + |
| 45 | +<script type="text/babel"> |
| 46 | + let arr = ["hello", 2]; // let |
| 47 | +
|
| 48 | + let [str, times] = arr; // деструктуризация |
| 49 | +
|
| 50 | + alert( str.repeat(times) ); // hellohello, метод repeat |
| 51 | +</script> |
| 52 | +``` |
| 53 | + |
| 54 | +Сверху подключается браузерный скрипт `browser.min.js` из пакета Babel. Он включает в себя полифилл и транспайлер. Далее он автоматически транслирует и выполняет скрипты с `type="text/babel"`. |
| 55 | + |
| 56 | +Размер `browser.min.js` превышает 1 мегабайт, поэтому такое использование в production строго не рекомендуется. |
| 57 | + |
| 58 | +# Примеры на этом сайте |
| 59 | + |
| 60 | +На этом сайте запускаемые примеры гарантированно работают в [последнем Chrome](https://www.google.com/chrome/browser/canary.html), браузерный Babel не используется, при желании вы можете запустить их в любом браузере вместе с Babel, как показано выше. |
| 61 | + |
| 62 | +Ещё раз заметим, что самая актуальная ситуация по поддержке современного стандарта браузерами отражена вот тут: [](https://kangax.github.io/compat-table/es6/). |
| 63 | + |
| 64 | + |
| 65 | + |
| 66 | + |
| 67 | + |
| 68 | + |
| 69 | + |
| 70 | + |
| 71 | + |
| 72 | + |
0 commit comments