Implementatie van JavaScript
Het corele ECMAScript van JavaScript beschrijft de syntaxis en basisobjecten van de taal;
DOM beschrijft de methoden en interfaces voor het verwerken van webinhoud;
BOM beschrijft de methoden en interfaces voor interactie met de browser.
ECMAScript, DOM en BOM
Hoewel ECMAScript een belangrijke norm is, is het niet het enige deel van JavaScript, noch het enige geregistreerde deel. In feite bestaat een volledige JavaScript-implementatie uit de volgende 3 verschillende delen:

ECMAScript
ECMAScript is niet gebonden aan een specifieke browser, in feite wordt het ook niet genoemd voor enige gebruikersinput-uitvoermethode (wat verschilt van C-dergelijke talen, die afhankelijk zijn van externe bibliotheken om dergelijke taken te voltooien). Wat is dan ECMAScript? De beschrijving van de ECMA-262-norm (het 2e deel) luidt als volgt:
“ECMAScript kan corele schrijfprogrammeerkapaciteiten bieden voor verschillende soorten gastomgevingen, dus is het corele scripttaal los van elke specifieke gastomgeving geregeld... ...”
Webbrowsers zijn een hostomgeving voor ECMAScript, maar zijn niet de enige. Feitelijk zijn er oneindig veel andere soorten omgevingen (zoals Nombas ScriptEase en ActionScript van Macromedia, die tegelijkertijd wordt gebruikt in Flash en Director MX) die ECMAScript-implementaties kunnen bevatten. Wat stelt ECMAScript dan buiten de browser vast?
Kortom, ECMAScript beschrijft het volgende:
- Grammar
- Typen
- Statements
- Kleintekens
- Reserverde woorden
- Bewerkingstekens
- Objecten
ECMAScript is enkel een beschrijving die alle eigenschappen, methoden en objecten van het scripttaal definieert. Andere talen kunnen ECMAScript implementeren als basis voor functionaliteit, zoals JavaScript:

Elke browser heeft zijn eigen implementatie van de ECMAScript-interface, die vervolgens wordt uitgebreid met DOM en BOM (deze onderwerpen worden in de volgende secties besproken). Er zijn ook andere talen die ECMAScript implementeren als basis voor functionaliteit, zoals Windows Scripting Host (WSH), ActionScript in Flash en Director MX van Macromedia, en Nombas ScriptEase.
1. Versies van ECMAScript
ECMAScript is onderverdeeld in verschillende versies en wordt gedefinieerd in een standaard genaamd ECMA-262. Net als andere standaarden wordt ECMA-262 gewijzigd en bijgewerkt. Wanneer er een belangrijke update is, wordt een nieuwe versie van de standaard uitgegeven. De nieuwste versie van ECMA-262 is 5.1, die in juni 2011 is uitgebracht.
De eerste versie van ECMA-262 is in essentie identiek aan Netscape's JavaScript 1.1, maar met het verwijderen van alle code die betrekking heeft op browsers, en daarnaast enkele kleine aanpassingen. Eerst en vooral vereist ECMA-262 ondersteuning voor de Unicode-standaard (om meertalige ondersteuning te bieden). Ten tweede vereist het dat objecten platformonafhankelijk zijn (Netscape's JavaScript 1.1 heeft in feite verschillende objectimplementaties, zoals de Date-object, die afhankelijk zijn van het platform). Dit is de belangrijkste reden waarom JavaScript 1.1 en 1.2 niet voldoen aan de specificaties van de eerste editie van ECMA-262.
De meeste updates in de tweede editie van ECMA-262 waren van redactionele aard. Deze update was bedoeld om een strikte overeenkomst te bereiken met ISO/IEC-16262 en voegde geen specifieke inhoud toe, veranderde of verwijderde. ECMAScript volgt meestal niet de tweede editie.
De derde editie van ECMA-262 was de eerste serieuze update van deze standaard. Het bracht updates voor string processing, foutdefinities en numerieke output. Het voegde ook reguliere expressies, nieuwe controlleerstaten, try...catch-exception handling en enkele kleine aanpassingen toe om de standaard internationaliseren. Over het algemeen markeert het ECMAScript als een échte programmeertaal.
2. Wat is ECMAScript-conformiteit
In ECMA-262 is de conformiteit van ECMAScript duidelijk gedefinieerd. Een scripttaal moet de volgende vier basisprincipes voldoen:
- Voldoende implementaties moeten alle 'types, waarden, objecten, eigenschappen, functies en programmataal en semantiek' zoals beschreven in ECMA-262 ondersteunen (ECMA-262, pagina 1).
- Voldoende implementaties moeten de Unicode-karakterspecificatie (UCS) ondersteunen.
- Voldoende implementaties kunnen 'extra types, waarden, objecten, eigenschappen en functies' toevoegen die niet zijn gespecificeerd in ECMA-262. ECMA-262 beschrijft deze toevoegingen als nieuwe objecten of nieuwe eigenschappen van objecten in de specificatie.
- Voldoende implementaties kunnen ondersteuning bieden voor 'programma's en reguliere expressies syntax' die niet zijn gedefinieerd in ECMA-262 (wat betekent dat ze de ingebouwde reguliere expressies ondersteuning kunnen vervangen of uitbreiden).
Alle implementaties van ECMAScript moeten voldoen aan de hierboven genoemde normen.
3. Ondersteuning van ECMAScript in webbrowsers
Netscape Navigator 3.0, die JavaScript 1.1 bevat, werd in 1996 gelanceerd. Vervolgens werd de specificatie van JavaScript 1.1 als een ontwerp voor een nieuwe standaard voorgedragen aan de ECMA. Met de explosieve populariteit van JavaScript begon Netscape enthousiast aan de ontwikkeling van versie 1.2. Maar er was een probleem: de ECMA accepteerde het ontwerp van Netscape niet. Kort na de release van Netscape Navigator 3.0 bracht Microsoft IE 3.0 uit. Deze versie van IE bevatte JScript 1.0 (de naam die Microsoft gaf aan zijn eigen implementatie van JavaScript), die oorspronkelijk was bedoeld om op dezelfde voet te staan met JavaScript 1.1. Omdat van sommige documenten het ontbreken en enkele onjuiste herhalingen, bereikte JScript 1.0 nooit het niveau van JavaScript 1.1.
Vóór de vaststelling van de eerste editie van ECMA-262, werd Netscape Navigator 4.0 gelanceerd met JavaScript 1.2 in 1997. Later dat jaar werd de ECMA-262-standaard geaccepteerd en genormaliseerd. Daarom is JavaScript 1.2 niet compatibel met de eerste editie van ECMAScript, hoewel ECMAScript zou moeten zijn gebaseerd op JavaScript 1.1.
De volgende stap voor JScript was de introductie van JScript 3.0 in IE 4.0 (versie 2.0 werd samen met IIS 3.0 gelanceerd, maar was niet in browsers opgenomen). Microsoft promootte JScript 3.0 als de eerste echte scripttaal die aan de ECMA-standaard voldoet. Toen, omdat ECMA-262 nog niet was vastgesteld, leed JScript 3.0 dezelfde lot als JavaScript 1.2 - het bleef niet voldoen aan de uiteindelijke ECMAScript-standaard.
Netscape koos om zijn JavaScript-implementatie te upgraden in Netscape Navigator 4.06. JavaScript 1.3 maakte Netscape eindelijk volledig compatibel met de eerste editie van ECMAScript. Netscape voegde ondersteuning voor de Unicode-standaard toe en behield tegelijkertijd alle nieuwe functies die in JavaScript 1.2 werden geïntroduceerd, terwijl het platform-onafhankelijk bleef.
Toen Netscape zijn broncode als Mozilla-project naar buiten bracht, was het oorspronkelijk de bedoeling dat JavaScript 1.4 zou worden geïntegreerd in Netscape Navigator 5.0. Echter, een vooruitstrevende beslissing - om Netscape's code volledig opnieuw te ontwerpen, verstoort deze werk. JavaScript 1.4 werd alleen als server-side scripttaal voor Netscape Enterprise Server uitgebracht en is later niet in browsers opgenomen.
Vandaag de dag volgen alle mainstream webbrowsers de derde editie van ECMA-262.
The following table lists the ECMAScript support in most popular web browsers:
Browser | DOM-compatibiliteit |
---|---|
Netscape Navigator 2.0 | - |
Netscape Navigator 3.0 | - |
Netscape Navigator 4.0 - 4.05 | - |
Netscape Navigator 4.06 - 4.79 | Edition 1 |
Netscape 6.0+ (Mozilla 0.6.0+) | Edition 3 |
Internet Explorer 3.0 | - |
Internet Explorer 4.0 | - |
Internet Explorer 5.0 | Edition 1 |
Internet Explorer 5.5+ | Edition 3 |
Opera 6.0 - 7.1 | Edition 2 |
Opera 7.2+ | Edition 3 |
Safari 1.0+/Konqueror ~ 2.0+ | Edition 3 |
DOM
DOM (Document Object Model) is an application programming interface (API) for HTML and XML. DOM will plan the entire page as a document composed of a node hierarchy. Each part of an HTML or XML page is a derivative of a node. Consider the following HTML page:
<html> <head> <title>Sample Page</title> </head> <body> <p>hello world!</p> </body> </html>
This code can be drawn as a node hierarchy diagram using DOM:

DOM represents the document by creating a tree, thereby giving developers unprecedented control over the content and structure of the document. Nodes can be easily deleted, added, and replaced using the DOM API.
1. Why DOM is indispensable
Since IE 4.0 and Netscape Navigator 4.0 began to support different forms of dynamic HTML (DHTML), developers could for the first time modify the appearance and content of a web page without reloading it. This was a major leap forward in Web technology, but it also brought about huge problems. Netscape and Microsoft each developed their own DHTML, thus ending the era when web developers could write a single HTML page that could be accessed on all browsers.
The industry decided that something must be done to maintain the cross-platform nature of the Web. They were worried that if Netscape and Microsoft were left to do as they pleased, the Web would inevitably be divided into two separate parts, each suitable only for specific browsers. Therefore, the group responsible for specifying Web communication standards, W3C (World Wide Web Consortium), began to develop DOM.
2. DOM's various levels
DOM Level 1 is in oktober 1998 voorgesteld door de W3C. Het bestaat uit twee modules, te weten DOM Core en DOM HTML. De eerste biedt een structuurdiagram van documenten gebaseerd op XML, zodat elk deel van het document kan worden bereikt en bewerkt; de laatste voegt enkele HTML-specifieke objecten en methoden toe om DOM Core uit te breiden.
Let op, DOM is niet alleen voor JavaScript, in feite hebben veel andere talen het geïmplementeerd. Toch is de DOM in webbrowsers met ECMAScript geïmplementeerd en is het nu een groot onderdeel van het JavaScript-taal.
DOM Level 1 is een doel, namelijk het plannen van de structuur van het document, terwijl het doel van DOM Level 2 veel breder is. De uitbreiding van het oorspronkelijke DOM voegt ondersteuning toe voor muis- en gebruikersinterfacegebeurtenissen (DHTML biedt hiervoor uitgebreide ondersteuning), bereik, doorzoeken (herhaaldelijk uitvoeren van methoden op het DOM-document) en voegt ondersteuning voor CSS (cascading style sheets) toe via object interfaces. Het oorspronkelijke DOM Core dat door Level 1 is geïntroduceerd, voegt ook ondersteuning toe voor XML-namenruimtes.
DOM Level 2 introduceert verschillende nieuwe DOM-modules die zijn ontworpen om nieuwe soorten interfaces te verwerken:
- DOM-view - beschrijft het volgen van verschillende views van het document (dus, voor en na CSS-stijlizing).
- DOM-gebeurtenissen - beschrijft de interfaces voor gebeurtenissen.
- DOM-stijl - beschrijft de interfaces voor het verwerken van CSS-stijlen.
- DOM-besuring en bereik - beschrijft de interfaces voor het doorzoeken en manipuleren van het document boom.
DOM Level 3 introduceert methoden om documenten op een uniforme manier te laden en te behouden (inclusief de nieuwe module DOM Load and Save) en methoden om documenten te valideren (DOM Validation), waardoor DOM verder wordt uitgebreid. Op Level 3 wordt DOM Core uitgebreid om alle XML 1.0 kenmerken te ondersteunen, inclusief XML Infoset, XPath en XML Base.
Bij het leren van DOM kan het gebeuren dat iemand DOM Level 0 citeert. Let op, er bestaat geen standaard DOM Level 0, het is slechts een historische referentiepunt voor DOM (DOM Level 0 verwijst naar de originele DHTML die ondersteund werd in IE 4.0 en Netscape Navigator 4.0).
3. Andere DOM
Behalve DOM Core en DOM HTML, hebben ook andere talen hun eigen DOM-standaarden gepubliceerd. Deze talen zijn gebaseerd op XML, en elke DOM voegt specifieke methoden en interfaces toe aan het bijbehorende taal:
- Schaalbare vectorgraphics (SVG) 1.0
- Digitale markeringstaal (MathML) 1.0
- Synchronisatie multimediale integratietaal (SMIL)
Opmerking:Als je meer wilt leren over gerelateerde inhoud, bezoek dan CodeW3C's SMIL 教程 和 SVG 教程。
Daarnaast hebben andere talen ook hun eigen DOM-implementaties ontwikkeld, zoals het XML-gebruikersinterface-taal (XUL) van Mozilla. Slechts de hierboven genoemde talen zijn aanbevolen standaarden van de W3C.
Ondersteuning voor DOM in webbrowsers
DOM was een standaard voordat webbrowsers het begonnen te implementeren. IE probeerde DOM voor het eerst in versie 5.0, maar het had pas echt DOM-ondersteuning in versie 5.5, waarbij IE Niveau 1 implementeerde. Sindsdien heeft IE geen nieuwe DOM-functies geïntroduceerd.
Netscape voegde DOM-ondersteuning pas toe tot versie 6 (Mozilla 0.6.0). Momenteel heeft Mozilla de beste DOM-ondersteuning, met volledige implementatie van Niveau 1, bijna alle Niveau 2 en een deel van Niveau 3. (Het doel van het Mozilla-ontwikkelteam is om een browser te bouwen die 100% compatibel is met de standaarden, en hun werk heeft zijn vruchten afgeworpen.)
Opera voegde pas DOM-ondersteuning toe tot versie 7.0, en Safari heeft ook de meeste DOM Niveau 1 geïmplementeerd. Ze zijn bijna allemaal op hetzelfde niveau als IE 5.5, en in sommige gevallen zelfs hoger. Wat betreft de ondersteuning voor DOM, zijn alle browsers aanzienlijk achter Mozilla. De tabel hieronder toont de ondersteuning voor DOM van veelgebruikte browsers.
Browser | DOM-compatibiliteit |
---|---|
Netscape Navigator 1.0 - 4.x | - |
Netscape 6.0+ (Mozilla 0.6.0+) | Niveau 1, Niveau 2, Niveau 3 (een deel) |
IE 2.0 - 4.x | - |
IE 5.0 | Niveau 1 (minimaal) |
IE 5.5+ | Niveau 1 (bijna allemaal) |
Opera 1.0 - 6.0 | - |
Opera 7.0+ | Niveau 1 (bijna allemaal), Niveau 2 (een deel) |
Safari 1.0+/Konqueror ~ 2.0+ | Niveau 1 |
Opmerking:Als je de kennis van DOM verder wilt leren, bezoek dan CodeW3C's HTML DOM 教程 和 XML DOM 教程。
BOM
IE 3.0 和 Netscape Navigator 3.0 提供了一种特性 - BOM(浏览器对象模型),可以对浏览器窗口进行访问和操作。使用 BOM,开发者可以移动窗口、改变状态栏中的文本以及执行其他与页面内容不直接相关的动作。使 BOM 独树一帜且又常常令人怀疑的地方在于,它只是 JavaScript 的一个部分,没有任何相关的标准。
BOM 主要处理浏览器窗口和框架,不过通常浏览器特定的 JavaScript 扩展都被看做 BOM 的一部分。这些扩展包括:
- 弹出新的浏览器窗口
- 移动、关闭浏览器窗口以及调整窗口大小
- 提供 Web 浏览器详细信息的定位对象
- 提供用户屏幕分辨率详细信息的屏幕对象
- 对 cookie 的支持
- IE 扩展了 BOM,加入了 ActiveXObject 类,可以通过 JavaScript 实例化 ActiveX 对象
由于没有相关的 BOM 标准,每种浏览器都有自己的 BOM 实现。有一些事实上的标准,如具有一个窗口对象和一个导航对象,不过每种浏览器可以为这些对象或其他对象定义自己的属性和方法。