143 lines
15 KiB
Markdown
143 lines
15 KiB
Markdown
# Введение в JavaScript
|
||
|
||
Давайте посмотрим, что такого особенного в JavaScript, почему именно он, и какие еще технологии существуют, кроме JavaScript.
|
||
[cut]
|
||
## Что такое JavaScript?
|
||
|
||
*JavaScript* изначально создавался для того, чтобы сделать web-странички "живыми".
|
||
Программы на этом языке называются *скриптами*. Они подключаются напрямую к HTML и, как только загружается страничка -- тут же выполняются.
|
||
|
||
**Программы на JavaScript -- обычный текст**. Они не требуют какой-то специальной подготовки.
|
||
|
||
В этом плане JavaScript сильно отличается от другого языка, который называется Java.
|
||
|
||
[smart header="Почему <u>Java</u>Script?"]
|
||
Когда создавался язык JavaScript, у него изначально было другое название: "LiveScript". Но тогда был очень популярен язык Java, и маркетологи решили, что схожее название сделает новый язык более популярным.
|
||
|
||
Планировалось, что JavaScript будет эдаким "младшим братом" Java. Однако, история распорядилась по-своему, JavaScript сильно вырос, и сейчас это совершенно независимый язык, со своей спецификацией, которая называется <a href="http://en.wikipedia.org/wiki/ECMAScript">ECMAScript</a>, и к Java не имеет никакого отношения.
|
||
|
||
У него много особенностей, которые усложняют освоение, но по ходу учебника мы с ними разберемся.
|
||
[/smart]
|
||
|
||
Чтобы читать и выполнять текст на JavaScript, нужна специальная программа -- [интерпретатор](http://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B0%D1%82%D0%BE%D1%80). Процесс выполнения скрипта называют *"интерпретацией"*.
|
||
|
||
[smart header="Компиляция и интерпретация, для программистов"]
|
||
Строго говоря, для выполнения программ существуют "компиляторы" и "интерпретаторы".
|
||
|
||
Компиляторы преобразуют программу в машинный код. Этот машинный код затем распространяется и запускается.
|
||
|
||
А интерпретаторы, в частности, встроенный JS-интерпретатор браузера -- получают программу в виде исходного кода. При этом распространяется именно сам исходный код (скрипт).
|
||
|
||
Современные интерпретаторы перед выполнением преобразуют JavaScript в машинный код или близко к нему, а уже затем выполняют.
|
||
[/smart]
|
||
|
||
Во все основные браузеры встроен интерпретатор JavaScript, именно поэтому они могут выполнять скрипты на странице.
|
||
|
||
Но, разумеется, этим возможности JavaScript не ограничены. Это полноценный язык, программы на котором можно запускать и на сервере, и даже в стиральной машинке, если в ней установлен соответствующий интерпретатор.
|
||
|
||
## Что умеет JavaScript?
|
||
|
||
Современный JavaScript -- это "безопасный" язык программирования общего назначения. Он не предоставляет низкоуровневых средств работы с памятью, процессором, так как изначально был ориентирован на браузеры, в которых это не требуется.
|
||
|
||
Что же касается остальных возможностей -- они зависят от окружения, в котором запущен JavaScript.
|
||
|
||
В браузере JavaScript умеет делать все, что относится к манипуляции со страницей, взаимодействию с посетителем и, в какой-то мере, с сервером:
|
||
|
||
<ul>
|
||
<li>Создавать новые HTML-теги, удалять существующие, менять стили элементов, прятать, показывать элементы и т.п.</li>
|
||
<li>Реагировать на действия посетителя, обрабатывать клики мыши, перемещение курсора, нажатие на клавиатуру и т.п. </li>
|
||
<li>Посылать запросы на сервер и загружать данные без перезагрузки страницы(эта технология называется "AJAX").</li>
|
||
<li>Получать и устанавливать cookie, запрашивать данные, выводить сообщения...</li>
|
||
<li>...и многое, многое другое!</li>
|
||
</ul>
|
||
|
||
## Что НЕ умеет JavaScript?
|
||
|
||
JavaScript -- быстрый и мощный язык, но браузер накладывает на его исполнение некоторые ограничения..
|
||
|
||
Это сделано для безопасности пользователей, чтобы злоумышленник не мог с помощью JavaScript получить личные данные или как-то навредить компьютеру пользователя.
|
||
|
||
Этих ограничений нет там, где JavaScript используется вне браузера, например на сервере. Кроме того, различные браузеры предоставляют свои механизмы по установке плагинов и расширений, которые обладают расширенными возможностями, но требуют специальных действий по установке от пользователя
|
||
|
||
**Большинство возможностей JavaScript в браузере ограничено текущим окном и страницей.**
|
||
|
||
<img src="jslimit.jpg">
|
||
|
||
<ul>
|
||
<li>JavaScript не может читать/записывать произвольные файлы на жесткий диск, копировать их или вызывать программы. Он не имеет прямого доступа к операционной системе.
|
||
|
||
Современные браузеры могут работать с файлами, но эта возможность ограничена специально выделенной директорией -- *"песочницей"*. Возможности по доступу к устройствам также прорабатываются в современных стандартах и частично доступны в некоторых браузерах.
|
||
</li>
|
||
<li>JavaScript, работающий в одной вкладке, не может общаться с другими вкладками и окнами, за исключением случая, когда он сам открыл это окно или несколько вкладок из одного источника (одинаковый домен, порт, протокол).
|
||
|
||
Есть способы это обойти, и они раскрыты в учебнике, но они требуют внедрения специального кода на оба документа, которые находятся в разных вкладках или окнах. Без него, из соображений безопасности, залезть из одной вкладки в другую при помощи JavaScript нельзя.
|
||
</li>
|
||
<li>Из JavaScript можно легко посылать запросы на сервер, с которого пришла страница. Запрос на другой домен тоже возможен, но менее удобен, т.к. и здесь есть ограничения безопасности.
|
||
</li>
|
||
</ul>
|
||
|
||
## В чем уникальность JavaScript?
|
||
|
||
Есть как минимум *три* замечательных особенности JavaScript:
|
||
|
||
[compare]
|
||
+Полная интеграция с HTML/CSS.
|
||
+Простые вещи делаются просто.
|
||
+Поддерживается всеми распространенными браузерами и включен по умолчанию.
|
||
[/compare]
|
||
|
||
**Этих трёх вещей одновременно нет больше ни в одной браузерной технологии.** Поэтому JavaScript и является самым распространенным средством создания браузерных интерфейсов.
|
||
|
||
## Тенденции развития.
|
||
|
||
Перед тем, как вы планируете изучить новую технологию, полезно ознакомиться с ее развитием и перспективами. Здесь в JavaScript всё более чем хорошо.
|
||
|
||
### HTML 5
|
||
|
||
*HTML 5* -- эволюция стандарта HTML, добавляющая новые теги и, что более важно, ряд новых возможностей браузерам.
|
||
|
||
Вот несколько примеров:
|
||
<ul>
|
||
<li>Чтение/запись файлов на диск (в специальной "песочнице", то есть не любые).</li>
|
||
<li>Встроенная в браузер база данных, которая позволяет хранить данные на компьютере пользователя.</li>
|
||
<li>Многозадачность с одновременным использованием нескольких ядер процессора.</li>
|
||
<li>Проигрывание видео/аудио, без Flash.</li>
|
||
<li>2d и 3d-рисование с аппаратной поддержкой, как в современных играх.</li>
|
||
</ul>
|
||
|
||
Многие возможности HTML5 всё ещё в разработке, но браузеры постепенно начинают их поддерживать.
|
||
|
||
[summary]Тенденция: JavaScript становится всё более и более мощным и возможности браузера растут в сторону десктопных приложений.[/summary]
|
||
|
||
### EcmaScript 6
|
||
|
||
Сам язык JavaScript улучшается. Современный стандарт EcmaScript 5 включает в себя новые возможности для разработки, EcmaScript 6 будет шагом вперёд в улучшении синтаксиса языка.
|
||
|
||
Современные браузеры улучшают свои движки, чтобы увеличить скорость исполнения JavaScript, исправляют баги и стараются следовать стандартам.
|
||
|
||
[summary]Тенденция: JavaScript становится всё быстрее и стабильнее.[/summary]
|
||
|
||
Очень важно то, что новые стандарты HTML5 и ECMAScript сохраняют максимальную совместимость с предыдущими версиями. Это позволяет избежать неприятностей с уже существующими приложениями.
|
||
|
||
Впрочем, небольшая проблема с HTML5 всё же есть. Иногда браузеры стараются включить новые возможности, которые еще не полностью описаны в стандарте, но настолько интересны, что разработчики просто не могут ждать.
|
||
|
||
...Однако, со временем стандарт меняется и браузерам приходится подстраиваться к нему, что может привести к ошибкам в уже написанном (старом) коде. Поэтому следует дважды подумать перед тем, как применять на практике такие "супер-новые" решения.
|
||
|
||
При этом все браузеры сходятся к стандарту, и различий между ними уже гораздо меньше, чем всего лишь несколько лет назад.
|
||
|
||
[summary]Тенденция: всё идет к полной совместимости со стандартом.[/summary]
|
||
|
||
## Недостатки JavaScript
|
||
|
||
Зачастую, недостатки подходов и технологий -- это обратная сторона их полезности. Стоит ли упрекать молоток в том, что он -- тяжелый? Да, неудобно, зато гвозди забиваются лучше.
|
||
|
||
В JavaScript, однако, есть вполне объективные недоработки, связанные с тем, что язык, по выражению его автора (Brendan Eich) делался "за 10 бессонных дней и ночей". Поэтому некоторые моменты продуманы плохо, есть и откровенные ошибки (которые признает тот же Brendan).
|
||
|
||
Конкретные примеры мы увидим в дальнейшем, т.к. их удобнее обсуждать в процессе освоения языка.
|
||
|
||
Пока что нам важно знать, что некоторые "странности" языка не являются чем-то очень умным, а просто не были достаточно хорошо продуманы в своё время. В этом учебнике мы будем обращать особое внимание на основные недоработки и "грабли". Ничего критичного в них нет, если знаешь -- не наступишь.
|
||
|
||
**В новых версиях JavaScript (ECMAScript) эти недостатки постепенно убирают.**
|
||
|
||
Процесс внедрения небыстрый, в первую очередь из-за старых версий IE, но они постепенно вымирают. Современный IE в этом отношении несравнимо лучше.
|
||
|