Реализация JavaScript
- Предыдущая страница История JavaScript
- Следующая страница Грамматика ECMAScript
Ядро JavaScript ECMAScript описывает синтаксис и основные объекты этого языка;
DOM описывает методы и интерфейсы для обработки содержимого веб-страницы;
BOM описывает методы и интерфейсы для взаимодействия с браузером.
ECMAScript, DOM и BOM
Хотя ECMAScript является важным стандартом, он не является единственной частью JavaScript, конечно, не единственной частью, которая стандартизирована. На самом деле, полная реализация JavaScript состоит из следующих трёх различных частей:

ECMAScript
ECMAScript не привязан к любому конкретному браузеру, фактически, он не упоминает методы ввода-вывода для пользователей (этот момент отличается от языков, таких как C, которые требуют зависимостей от внешних библиотек для выполнения таких задач). Так что же такое ECMAScript? Описание в стандарте ECMA-262 (第二节) следующим образом:
“ECMAScript может предоставлять ядра的能力 для программирования сценариев для различных сред выполнения, поэтому ядренное языковое обеспечение пишется независимо от любой конкретной среды выполнения... ...”
Web 浏览器对于 ECMAScript 来说是一个宿主环境,但它并不是唯一的宿主环境。事实上,还有不计其数的其他各种环境(例如 Nombas 的 ScriptEase,以及 Macromedia 同时用在 Flash 和 Director MX 中的 ActionScript)可以容纳 ECMAScript 实现。那么 ECMAScript 在浏览器之外规定了些什么呢?
- Простыми словами, ECMAScript описывает следующее:
- Типы
- Синтаксис
- Ключевые слова
- Зарезервированные слова
- Операторы
- Объекты
ECMAScript всего лишь описание, которое определяет все свойства, методы и объекты скриптового языка. Другие языки могут реализовать ECMAScript в качестве базового уровня функциональности, как это делает JavaScript:

Каждый браузер имеет свою реализацию интерфейса ECMAScript, которая затем расширяется, включая DOM и BOM (более подробно будет рассмотрено в следующих разделах). Естественно, есть и другие реализации и расширения языка ECMAScript, такие как Windows Scripting Host (WSH), ActionScript в Flash и Director MX от Macromedia, а также Nombas ScriptEase.
1. Версии ECMAScript
ECMAScript разделен на несколько различных версий и определен в стандарте под названием ECMA-262. Как и другие стандарты, ECMA-262 может быть отредактирован и обновлен. При появлении основных обновлений выпускается новая версия стандарта. Самая последняя версия ECMA-262 - 5.1, была выпущена в июне 2011 года.
Первая версия ECMA-262 по сути была такой же, как и Netscape JavaScript 1.1, только из нее были удалены все коды, связанные с браузером, а также были внесены некоторые små ajustements. Сначала, ECMA-262 требует поддержки стандарта Unicode (чтобы поддерживать многоязычие). Во-вторых, он требует, чтобы объекты были независимыми от платформы (в Netscape JavaScript 1.1 объекты, такие как объект Date, действительно имели различные реализации, которые зависели от платформы). Это и есть основная причина, почему JavaScript 1.1 и 1.2 не соответствовали первой версии спецификации ECMA-262.
Большинство обновлений второго выпуска ECMA-262 по существу были редакционными. Эта обновление стандарта было направлено на достижение строгого соответствия ISO/IEC-16262, и не было добавлено, изменено или удалено никакого содержимого. ECMAScript, как правило, не соблюдает второй выпуск.
Третий выпуск ECMA-262 стал первой真正的 обновлением этого стандарта. Он предоставил обновления для обработки строк, определения ошибок и вывода чисел. В то же время, он добавил поддержку регулярных выражений, новых управляющих структур, обработки исключений try...catch и некоторые изменения для国际化 стандарта. В общем, это标志着 ECMAScript стал真正的 языком программирования.
2. Что такое соответствие ECMAScript
В ECMA-262 есть четкое определение соответствия ECMAScript. Язык скрипта должен соответствовать следующим четырем основным принципам:
- Соответствующие реализации должны поддерживать все
- Соответствующие реализации должны поддерживать стандарт Unicode символов (UCS)
- Соответствующие реализации могут добавлять
- Соответствующие реализации могут поддерживать
Все реализации ECMAScript должны соответствовать вышеуказанным стандартам.
3. Поддержка ECMAScript в веб-браузерах
В 1996 году был выпущен Netscape Navigator 3.0, содержащий JavaScript 1.1. Затем спецификация JavaScript 1.1 была представлена в качестве проекта нового стандарта в EMCA. С轰动性的普及 JavaScript, Netscape с радостью начал разработку версии 1.2. Но была одна проблема, ECMA не приняла проект Netscape. Не прошло много времени после выпуска Netscape Navigator 3.0, как Microsoft выпустил IE 3.0. Эта версия IE содержала JScript 1.0 (имя собственной реализации JavaScript от Microsoft), которая изначально планировалась как сравнимая с JavaScript 1.1. Однако, из-за неполных документов и некоторых неуместных повторяющихся свойств, JScript 1.0远远没有达到 уровня JavaScript 1.1.
До утверждения первой версии ECMA-262, Netscape Navigator 4.0 с JavaScript 1.2 был выпущен в 1997 году, а позже в том же году стандарт ECMA-262 был принят и стандартизирован. Таким образом, JavaScript 1.2 не совместим с первой версией ECMAScript, хотя ECMAScript должен был быть основан на JavaScript 1.1.
Следующим шагом для JScript стала версия JScript 3.0, добавленная в IE 4.0 (версия 2.0 была выпущена вместе с IIS 3.0, но не включена в браузер). Microsoft активно пропагандировал JScript 3.0 как первый в мире真正 соответствующий стандарту ECMA скриптовый язык. В то время, ECMA-262 еще не был окончательно утвержден, поэтому JScript 3.0 также遭遇了 такую же судьбу, как и JavaScript 1.2 - он так и не соответствовал окончательному стандарту ECMAScript.
Netscape решил обновить свою реализацию JavaScript в Netscape Navigator 4.06. JavaScript 1.3 наконец позволил Netscape полностью соответствовать первой версии ECMAScript. Netscape добавил поддержку стандарта Unicode и обеспечил платформонезависимость всех объектов, сохраняя при этом все новые возможности, введенные в JavaScript 1.2.
Когда Netscape опубликовал его исходный код в проекте Mozilla, планировалось, что JavaScript 1.4 будет встроен в Netscape Navigator 5.0. Однако, смелое решение - полностью заново спроектировать код Netscape, разрушило эту работу. JavaScript 1.4 был выпущен только как серверный скриптовый язык для Netscape Enterprise Server, и впоследствии он не был включен в браузеры.
В настоящее время все основные веб-браузеры соблюдают третью версию ECMA-262.
Ниже приведена таблица, показывающая поддержку ECMAScript в большинстве популярных веб-браузеров:
Браузер | Совместимость DOM |
---|---|
Netscape Navigator 2.0 | - |
Netscape Navigator 3.0 | - |
Netscape Navigator 4.0 - 4.05 | - |
Netscape Navigator 4.06 - 4.79 | Версия 1 |
Netscape 6.0+ (Mozilla 0.6.0+) | Версия 3 |
Internet Explorer 3.0 | - |
Internet Explorer 4.0 | - |
Internet Explorer 5.0 | Версия 1 |
Internet Explorer 5.5+ | Версия 3 |
Opera 6.0 - 7.1 | Версия 2 |
Opera 7.2+ | Версия 3 |
Safari 1.0+/Konqueror ~ 2.0+ | Версия 3 |
DOM
DOM (Document Object Model) - это интерфейс прикладного программирования (API) для HTML и XML. DOM планирует всю страницу как документ, состоящий из иерархии узлов. Каждая часть HTML или XML-документа является производным от узла. Рассмотрим следующий HTML-документ:
<html> <head> <title>Пример страницы</title> </head> <body> <p>hello world!</p> </body> </html>
Этот код можно нарисовать в виде графа узлов с помощью DOM:

DOM представляет документ в виде дерева, что предоставляет разработчикам безprecedентный контроль над содержимым и структурой документа. С помощью DOM API можно легко удалять, добавлять и заменять узлы.
1. Почему DOM необходим
С момента, как IE 4.0 и Netscape Navigator 4.0 начали поддерживать различные формы динамического HTML (DHTML), разработчики впервые могли изменять外观 и содержимое веб-страницы без перезагрузки. Это был значительный шаг вперед в веб-технологиях, но также принес множество проблем. Netscape и Microsoft начали разработку своих собственных DHTML, что положило конец периоду, когда разработчики могли писать один HTML-документ, доступный во всех браузерах.
Индустрия решила, что необходимо предпринять что-то, чтобы поддерживать кроссплатформенность Веба, так как они боялись, что если позволить Netscape и Microsoft продолжать так делать, Веб必将 разделиться на две независимые части, каждая из которых будет подходить только для определенного браузера. Поэтому группа, ответственная за определение стандартов коммуникации Веба, W3C (World Wide Web Consortium), начала разрабатывать DOM.
2. Уровни DOM
DOM Level 1 был предложен W3C в октябре 1998 года. Он состоит из двух модулей, namely DOM Core и DOM HTML. Первый предоставляет структуру документа на основе XML, чтобы можно было доступ и операция с любыми частями документа; второй добавляет объекты и методы, специфичные для HTML, тем самым расширяя DOM Core.
Обратите внимание, что DOM не является эксклюзивным для JavaScript, на самом деле его реализовали многие другие языки. Однако, DOM в веб-браузерах реализован с помощью ECMAScript и теперь является важной частью языка JavaScript.
DOM Level 1 является только целевой, то есть планирование структуры документа, в то время как цели DOM Level 2 гораздо шире. Расширение оригинального DOM добавило поддержку событий мыши и интерфейса пользователя (DHTML предоставляет обширную поддержку для этого), диапазонов,遍历 (повторное выполнение методов DOM документа) и поддержку CSS (каскадных таблиц стилей) через объектные интерфейсы. Оригинальный DOM Core, введенный на уровне 1, также добавил поддержку XML命名空间的.
DOM Level 2 ввел несколько новых модулей DOM, предназначенных для обработки новых типов интерфейсов:
- DOM视图 - описание отслеживания различных представлений документа (т.е. до и после стилизации CSS)
- DOM события - описание интерфейсов для событий
- DOM стили - описание интерфейсов для обработки стилей на основе CSS
- DOM遍历和范围 - описание интерфейсов для遍历和操作文档树
DOM Level 3 ввел методы для единообразного загрузки и сохранения документа (включая новый модуль DOM Load and Save) и методы валидации документа (DOM Validation), что расширило возможности DOM. В Level 3 DOM Core был расширен для поддержки всех特性的 XML 1.0, включая XML Infoset, XPath и XML Base.
Во время изучения DOM, можно встретить людей, цитирующих DOM Level 0. Обратите внимание, что стандарта DOM Level 0 не существует, это просто историческая точка参照 (DOM Level 0指的是 оригинальный DHTML, поддерживаемый в IE 4.0 и Netscape Navigator 4.0).
3. Другие DOM
Кроме DOM Core и DOM HTML, несколько других языков опубликовали свои стандарты DOM. Все они основаны на XML, и каждый DOM добавляет уникальные методы и интерфейсы для соответствующего языка:
- Масштабируемый векторный язык (SVG) 1.0
- Цифровой языковой маркер (MathML) 1.0
- Язык интеграции синхронного многоформатного контента (SMIL)
Комментарий:Если вы хотите узнать больше о相关知识, пожалуйста, посетите сайт CodeW3C Учебник SMIL и Учебник SVG.
Кроме того, другие языки также разработали свои реализации DOM, такие как языки пользовательского интерфейса XML Mozilla (XUL). Однако, только перечисленные языки являются рекомендованными стандартами W3C.
Поддержка DOM в веб-браузерах
DOM был стандартом до того, как его начали реализовывать в веб-браузерах. Первый опыт реализации DOM IE начал с версии 5.0, но только после версии 5.5 у него появилась真正的 поддержка DOM, IE 5.5 реализовал DOM Уровень 1. С тех пор IE не вносил новых функций DOM.
Netscape только с версии Netscape 6 (Mozilla 0.6.0) начал поддерживать DOM. В настоящее время, Mozilla имеет лучшую поддержку DOM, реализовав полный Уровень 1, почти весь Уровень 2 и часть Уровня 3. (Цель команды разработчиков Mozilla - создать браузер, который на 100% совместим с стандартами, и их работа была вознаграждена.)
Opera только с 7.0 версии начала поддерживать DOM, а Safari также реализовал的大部分 DOM Уровень 1. Они почти на одном уровне с IE 5.5, в некоторых случаях даже превосходит IE 5.5. Однако, в отношении поддержки DOM, все браузеры значительно отстают от Mozilla. В таблице ниже приведены поддерживаемые DOM популярными браузерами.
Браузер | Совместимость DOM |
---|---|
Netscape Navigator 1.0 - 4.x | - |
Netscape 6.0+ (Mozilla 0.6.0+) | Уровень 1, Уровень 2, Уровень 3 (частично) |
IE 2.0 - 4.x | - |
IE 5.0 | Уровень 1 (минимальный) |
IE 5.5+ | Уровень 1 (почти полностью) |
Opera 1.0 - 6.0 | - |
Opera 7.0+ | Уровень 1 (почти полностью), Уровень 2 (частично) |
Safari 1.0+/Konqueror ~ 2.0+ | Уровень 1 |
Комментарий:Если вы хотите углубиться в изучение знаний о DOM, пожалуйста, посетите сайт CodeW3C Учебник HTML DOM и Учебник XML DOM.
BOM
IE 3.0 и Netscape Navigator 3.0 предоставили функциональность - BOM (Browser Object Model), которая позволяет доступ и управление окнами браузера. Используя BOM, разработчики могут перемещать окна, изменять текст в строке состояния и выполнять другие действия, не связанные с содержимым страницы. Что делает BOM уникальным и часто вызывающим сомнения, так это то, что это всего лишь часть JavaScript,没有任何相关的 стандарты.
BOM主要负责处理浏览器窗口和 фреймы, но обычно специфические для браузера расширения JavaScript считаются частью BOM. Эти расширения включают:
- Всплывающее окно браузера
- Перемещение, закрытие окна браузера и изменение размера окна
- Объект местоположения, предоставляющий детальную информацию о веб-браузере
- Объект экрана, предоставляющий детальную информацию о разрешении экрана пользователя
- Поддержка cookie
- IE расширил BOM, добавив класс ActiveXObject, через который можно инстанцировать объекты ActiveX с помощью JavaScript
Поскольку нет связанных стандартов BOM, каждый браузер имеет свою реализацию BOM. Есть фактические стандарты, такие как наличие объекта окна и объекта навигации, но каждый браузер может определить свои свойства и методы для этих объектов или других объектов.
См. также:
- Предыдущая страница История JavaScript
- Следующая страница Грамматика ECMAScript