|
1 | | -# Справочники и спецификации |
2 | 1 |
|
3 | | -В этом разделе мы познакомимся со справочниками и спецификациями. |
| 2 | +# Modern JavaScript now |
4 | 3 |
|
5 | | -Если вы только начинаете изучение, то вряд ли они будут нужны прямо сейчас. Тем не менее, эта глава находится в начале, так как предсказать точный момент, когда вы захотите заглянуть в справочник -- невозможно, но точно известно, что этот момент настанет. |
| 4 | +The [latest standard](http://www.ecma-international.org/publications/standards/Ecma-262.htm) was approved in June 2015. |
6 | 5 |
|
7 | | -Поэтому рекомендуется кратко взглянуть на них и взять на заметку, чтобы при необходимости вернуться к ним в будущем. |
| 6 | +As it includes a lot of new features, most browsers implement them partially. You can find the current state of the support at [](https://kangax.github.io/compat-table/es6/). |
8 | 7 |
|
9 | | -[cut] |
| 8 | +Sometimes the project is targeted to a single JavaScript engine, like Node.JS (V8). Then we can use only the features supported by V8 (quite a lot). |
10 | 9 |
|
11 | | -## Справочники, и как в них искать |
| 10 | +But what if we're writing a cross-browser application? |
12 | 11 |
|
13 | | -Самая полная и подробная информация по JavaScript и браузерам есть в справочниках. |
| 12 | +## Babel.JS |
14 | 13 |
|
15 | | -Её объём таков, что перевести всё с английского невозможно. Даже сделать "единый полный справочник" не получается, так как изменений много и они происходят постоянно. |
| 14 | +[Babel.JS](https://babeljs.io) is a [transpiler](https://en.wikipedia.org/wiki/Source-to-source_compiler), it rewrites the modern JavaScript code into the previous standard. |
16 | 15 |
|
17 | | -Тем не менее, жить вполне можно если знать, куда смотреть. |
18 | 16 |
|
19 | | -**Есть три основных справочника по JavaScript на английском языке**: |
| 17 | +Он состоит из двух частей: |
20 | 18 |
|
21 | 19 | <ol> |
22 | | -<li>[Mozilla Developer Network](https://developer.mozilla.org/) -- содержит информацию, верную для основных браузеров. Также там присутствуют расширения только для Firefox (они помечены). |
23 | | - |
24 | | -Когда мне нужно быстро найти "стандартную" информацию по `RegExp` - ввожу в Google **"RegExp MDN"**, и ключевое слово "MDN" (Mozilla Developer Network) приводит к информации из этого справочника. |
25 | | -</li> |
26 | | -<li>[MSDN](http://msdn.microsoft.com) -- справочник от Microsoft. Там много информации, в том числе и по JavaScript (они называют его "JScript"). Если нужно что-то, специфичное для IE -- лучше лезть сразу туда. |
27 | | - |
28 | | -Например, для информации об особенностях `RegExp` в IE -- полезное сочетание: **"RegExp msdn"**. Иногда к поисковой фразе лучше добавить термин "JScript": **"RegExp msdn jscript"**. </li> |
29 | | -<li>[Safari Developer Library](https://developer.apple.com/library/safari/navigation/index.html) -- менее известен и используется реже, но в нём тоже можно найти ценную информацию.</li> |
| 20 | +<li>Собственно транспайлер, который переписывает код.</li> |
| 21 | +<li>Полифилл, который добавляет методы `Array.from`, `String.prototype.repeat` и другие.</li> |
30 | 22 | </ol> |
31 | 23 |
|
32 | | -Есть ещё справочники, не от разработчиков браузеров, но тоже хорошие: |
33 | | - |
34 | | -<ol> |
35 | | -<li>[http://help.dottoro.com]() -- содержит подробную информацию по HTML/CSS/JavaScript.</li> |
36 | | -<li>[http://javascript.ru/manual]() -- справочник по JavaScript на русском языке, он содержит основную информацию по языку, без функций для работы с документом. К нему можно обращаться и по адресу, если знаете, что искать. Например, так: [http://javascript.ru/RegExp](). |
37 | | -</li> |
38 | | -<li>[http://www.quirksmode.org]() -- информация о браузерных несовместимостях. Этот ресурс сам по себе довольно старый и, в первую очередь, полезен для поддержки устаревших браузеров. Для поиска можно пользоваться комбинацией **"quirksmode onkeypress"** в Google. </li> |
39 | | -<li>[http://caniuse.com]() -- ресурс о поддержке браузерами новейших возможностей HTML/CSS/JavaScript. Например, для поддержки функций криптографии: [http://caniuse.com/#feat=cryptography](). |
40 | | -</li> |
41 | | -</ol> |
42 | | - |
43 | | -## Спецификации |
44 | | - |
45 | | -Спецификация -- это самый главный, определяющий документ, в котором написано, как себя ведёт JavaScript, браузер, CSS и т.п. |
46 | | - |
47 | | -Если что-то непонятно, и справочник не даёт ответ, то спецификация, как правило, раскрывает тему гораздо глубже и позволяет расставить точки над i. |
48 | | - |
49 | | -### Спецификация ECMAScript |
50 | | - |
51 | | -Спецификация (формальное описание синтаксиса, базовых объектов и алгоритмов) языка Javascript называется [ECMAScript](http://www.ecma-international.org/publications/standards/Ecma-262.htm). |
52 | | - |
53 | | -Её перевод есть на сайте в разделе [стандарт языка](http://es5.javascript.ru/). |
54 | | - |
55 | | -[smart header="Почему не просто "JavaScript" ?"] |
56 | | -Вы можете спросить: "Почему спецификация для JavaScript не называется просто *"JavaScript"*, зачем существует какое-то отдельное название?" |
57 | | - |
58 | | -Всё потому, что JavaScript™ -- зарегистрированная торговая марка, принадлежащая корпорации Oracle. |
| 24 | +На странице [](https://babeljs.io/repl/) можно поэкспериментировать с транспайлером: слева вводится код в ES-2015, а справа появляется результат его преобразования в ES5. |
59 | 25 |
|
60 | | -Название "ECMAScript" было выбрано, чтобы сохранить спецификацию независимой от владельцев торговой марки. |
61 | | -[/smart] |
| 26 | +Обычно Babel.JS работает на сервере в составе системы сборки JS-кода (например [webpack](http://webpack.github.io/) или [brunch](http://brunch.io/)) и автоматически переписывает весь код в ES5. |
62 | 27 |
|
63 | | -Спецификация может рассказать многое о том, как работает язык, и она является самым фундаментальным, доверенным источником информации. |
| 28 | +Настройка такой конвертации тривиальна, единственно -- нужно поднять саму систему сборки, а добавить к ней Babel легко, плагины есть к любой из них. |
64 | 29 |
|
65 | | -### Спецификации HTML/DOM/CSS |
| 30 | +Если же хочется "поиграться", то можно использовать и браузерный вариант Babel. |
66 | 31 |
|
67 | | -JavaScript -- язык общего назначения, поэтому в спецификации ECMAScript нет ни слова о браузерах. |
| 32 | +Это выглядит так: |
68 | 33 |
|
69 | | -Главная организация, которая занимается HTML, CSS, XML и множеством других стандартов -- [Консорциум Всемирной паутины](https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%81%D0%BE%D1%80%D1%86%D0%B8%D1%83%D0%BC_%D0%92%D1%81%D0%B5%D0%BC%D0%B8%D1%80%D0%BD%D0%BE%D0%B9_%D0%BF%D0%B0%D1%83%D1%82%D0%B8%D0%BD%D1%8B) (World Wide Consortium, сокращённо W3C). |
| 34 | +```html |
| 35 | +<!--+ run --> |
| 36 | +*!* |
| 37 | +<!-- browser.js лежит на моём сервере, не надо брать с него --> |
| 38 | +<script src="https://js.cx/babel-core/browser.min.js"></script> |
| 39 | +*/!* |
70 | 40 |
|
71 | | -Информацию о них можно найти на сайте [w3.org](http://w3.org). К сожалению, найти в этой куче то, что нужно, может быть нелегко, особенно когда неизвестно в каком именно стандарте искать. Самый лучший способ -- попросить Google с указанием сайта. |
| 41 | +<script type="text/babel"> |
| 42 | + let arr = ["hello", 2]; // let |
72 | 43 |
|
73 | | -Например, для поиска `document.cookie` набрать [document.cookie site:w3.org](https://www.google.com/search?q=document.cookie+site%3Aw3.org). |
| 44 | + let [str, times] = arr; // деструктуризация |
74 | 45 |
|
75 | | -Последние версии стандартов расположены на домене [dev.w3.org](http://dev.w3.org). |
| 46 | + alert( str.repeat(times) ); // hellohello, метод repeat |
| 47 | +</script> |
| 48 | +``` |
76 | 49 |
|
77 | | -Кроме того, в том, что касается HTML5 и DOM/CSS, W3C активно использует наработки другой организации -- [WhatWG](https://whatwg.org/). Поэтому самые актуальные версии спецификаций по этим темам обычно находятся на [https://whatwg.org/specs/](). |
| 50 | +Сверху подключается браузерный скрипт `browser.min.js` из пакета Babel. Он включает в себя полифилл и транспайлер. Далее он автоматически транслирует и выполняет скрипты с `type="text/babel"`. |
78 | 51 |
|
79 | | -Иногда бывает так, что информация на сайте [http://dev.w3.org]() отличается от [http://whatwg.org](). В этом случае, как правило, следует руководствоваться [http://whatwg.org](). |
| 52 | +Размер `browser.min.js` превышает 1 мегабайт, поэтому такое использование в production строго не рекомендуется. |
80 | 53 |
|
81 | | -## Итого |
| 54 | +# Примеры на этом сайте |
82 | 55 |
|
83 | | -Итак, посмотрим какие у нас есть источники информации. |
| 56 | +[warn header="Только при поддержке браузера"] |
| 57 | +Запускаемые примеры с ES-2015 будут работать только если ваш браузер поддерживает соответствующую возможность стандарта. |
| 58 | +[/warn] |
84 | 59 |
|
85 | | -Справочники: |
86 | | -<ul> |
87 | | -<li><a href="https://developer.mozilla.org/">Mozilla Developer Network</a> -- информация для Firefox и большинства браузеров. |
88 | | -Google-комбо: `"RegExp MDN"`, ключевое слово "MDN".</li> |
89 | | -<li><a href="http://msdn.microsoft.com/">MSDN</a> -- информация по IE. |
90 | | -Google-комбо: `"RegExp msdn"`. Иногда лучше добавить термин "JScript": `"RegExp msdn jscript"`.</li> |
91 | | -<li>[Safari Developer Library](https://developer.apple.com/library/safari/navigation/index.html) -- информация по Safari.</li> |
92 | | -<li><a href="http://help.dottoro.com">http://help.dottoro.com</a> -- подробная информация по HTML/CSS/JavaScript с учётом браузерной совместимости. |
93 | | -Google-комбо: `"RegExp dottoro"`.</li> |
94 | | -<li>[](http://javascript.ru/manual) -- справочник по JavaScript на русском языке. К нему можно обращаться и по адресу, если знаете, что искать. Например, так: [](http://javascript.ru/RegExp). |
95 | | -Google-комбо: `"RegExp site:javascript.ru"`. |
96 | | -</li> |
97 | | -</ul> |
| 60 | +Это означает, что при запуске примеров в браузере, который их не поддерживает, будет ошибка. Это не означает, что пример неправильный! Просто пока нет поддержки... |
98 | 61 |
|
99 | | -Спецификации содержат важнейшую информацию о том, как оно "должно работать": |
| 62 | +Рекомендуется [Chrome Canary](https://www.google.com/chrome/browser/canary.html) большинство примеров в нём работает. [Firefox Developer Edition](https://www.mozilla.org/en-US/firefox/channel/#developer) тоже неплох в поддержке современного стандарта, но на момент написания этого текста переменные [let](/let-const) работают только при указании `version=1.7` в типе скрипта: `<script type="application/javascript;version=1.7">`. Надеюсь, скоро это требование (`version=1.7`) отменят. |
100 | 63 |
|
101 | | -<ul> |
102 | | -<li>JavaScript, современный стандарт [ES5 (англ)](http://www.ecma-international.org/publications/standards/Ecma-262.htm), и предыдущий [ES3 (рус)](http://javascript.ru/ecma).</li> |
103 | | -<li>HTML/DOM/CSS -- на сайте [http://w3.org](http://www.w3.org). |
104 | | -Google-комбо: `"document.cookie site:w3.org"`.</li> |
105 | | -<li>...А самые последние версии стандартов -- на [http://dev.w3.org]() и на [http://whatwg.org/specs/](https://whatwg.org/specs/).</li> |
106 | | -</ul> |
| 64 | +Впрочем, если пример в браузере не работает (обычно проявляется как ошибка синтаксиса) -- почти все примеры вы можете запустить его при помощи Babel, на странице [Babel: try it out](https://babeljs.io/repl/). Там же увидите и преобразованный код. |
107 | 65 |
|
108 | | -То, как оно на самом деле работает и несовместимости: |
| 66 | +На практике для кросс-браузерности всё равно используют Babel. |
109 | 67 |
|
110 | | -<ul> |
111 | | -<li>[http://quirksmode.org/](). Google-комбо: `"innerHeight quirksmode"`.</li> |
112 | | -</ul> |
| 68 | +Ещё раз заметим, что самая актуальная ситуация по поддержке современного стандарта браузерами и транспайлерами отражена на странице [](https://kangax.github.io/compat-table/es6/). |
113 | 69 |
|
114 | | -Поддержка современных и новейших возможностей браузерами: |
| 70 | +Итак, поехали! |
115 | 71 |
|
116 | | -<ul> |
117 | | -<li>[http://caniuse.com](). Google-комбо: `"caniuse geolocation"`.</li> |
118 | | -</ul> |
0 commit comments