Обзор JavaScript
================

Введение
--------

Если HTML определяет структуру и контент веб-страницы, а CSS задаёт формат и внешний вид, то JavaScript добавляет интерактивность и создаёт богатые веб-приложения.

Однако, под общим термином "JavaScript", в контексте веб-браузера, понимаются несколько очень разных вещей. Одна из них - это базовый язык программирования (ECMAScript), а другая - коллекция Web APIs, включая DOM (Объектно-ориентированная модель документа).

JavaScript, базовый язык программирования (ECMAScript)
------------------------------------------------------

Базовый язык JavaScript стандартизирован комитетом ECMA TC-39 как язык программирования под названием ECMAScript (en-US).

Базовый язык также используется в не-браузерном окружении, например, в node.js.

### Что попадает под понятие ECMAScript?

Кроме прочего, ECMAScript (en-US) определяет:

* Синтаксис языка (правила парсинга, ключевые слова, порядок выполнения, инициализацию объекта литерала...)
* Механизм обработки ошибок (исключения, try/catch оператор,возможность создавать новые типы ошибок)
* Типы данных (логические, числа, строки, функции, объекты...)
* Глобальный объект. В браузерах глобальным объектом является `window`, но ECMAscript определяет только те APIs, которые не являются специфическими для браузера, как `parseInt`, `parseFloat`, `decodeURI`, `encodeURI`...
* Механизм прототипного наследования
* Встроенные объекты и функции (JSON, Math, Array.prototype методы, методы самоанализа объекта...)
* Строгий режим
### API по интернационализации

Спецификация ECMAScript для API по интернационализации - дополнение к языковой спецификации ECMAScript, также стандартизированной Ecma TC39. API по интернационализации обеспечивает сопоставление (строковое сравнение), форматирование чисел, дат и времени для приложений на JavaScript, позволяя выбирать язык и проектировать функциональность в зависимости от нужд. Начальный стандарт был одобрен в декабре 2012; статус реализации в браузерах ведётся в документации `Intl` object (en-US). Спецификация по интернационализации сейчас также утверждается на ежегодной основе, и браузеры постоянно улучшают её реализацию.

DOM APIs
--------

### WebIDL

Спецификация WebIDL является связующим звеном между технологиями DOM и ECMAScript.

### Ядро DOM

Объектно-ориентированная модель документа (DOM) это кросс-платформенное, **языково-независимое соглашение** по представлению объектов и взаимодействию с ними в документах HTML, XHTML и XML. Объект в **DOM-дереве** может быть адресован и обработан с помощью своих методов. Ядро Объектно-ориентированной модели документа стандартизируется W3C и определяет языково-независимые интерфейсы, абстрагирующие HTML и XML документы как объекты, и механизмы для управления этой абстракцией. Кроме прочих вещей, опряденных в DOM, можно также найти:

* Структуру документа, древовидную модель, и архитектуру событий DOM в ядре DOM: `Node`, `Element`, `DocumentFragment`, `Document`, `DOMImplementation`, `Event`, `EventTarget`, …
* Менее строгое определение архитектуры событий DOM, также как и определённые события DOM.
* Другие вещи, такие как DOM Traversal и DOM Range.

С точки зрения ECMAScript, объекты определённые в спецификации DOM называются объектами среды исполнения ("host objects").

### HTML DOM

HTML, это язык разметки Web, который определён в терминах DOM/ is specified in terms of the DOM. Layered above the abstract concepts defined in DOM Core, HTML also defines the *meaning* of elements. The HTML DOM includes such things as the `className` property on HTML elements, or APIs such as `document.body`.

The HTML specification also defines restrictions on documents; for example, it requires all children of a `ul` element, which represents an unordered list, to be `li` elements, as those represent list items. In general, it also forbids using elements and attributes that aren't defined in a standard.

Другие API, заслуживающие внимания
----------------------------------

* Функции setTimeout и setInterval впервые были определены в интерфейсе Window в стандарте HTML.
* XMLHttpRequest позволяет отправлять асинхронные HTTP запросы.
* Объектная модель CSS абстрагировать CSS-правила как объекты
* WebWorkers обеспечивает выполнение параллельных вычислений.
* WebSockets обеспечивает низкоуровневое двунаправленное соединение.
* Canvas 2D Context это API для рисования с помощью элемента `<canvas>`..