Implementering av JavaScript
- Föregående sida Historik för JavaScript
- Nästa sida Syntaks för ECMAScript
JavaScripts kärn ECMAScript beskriver språkets syntax och grundläggande objekt;
DOM beskriver metoderna och gränssnittet för att hantera webbsidans innehåll;
BOM beskriver metoderna och gränssnittet för att interagera med webbläsaren.
ECMAScript, DOM och BOM
Trots att ECMAScript är en viktig standard är det inte den enda delen av JavaScript, naturligtvis inte den enda delen som har standardiserats. Faktiskt består en fullständig JavaScript-implementering av följande 3 olika delar:

ECMAScript
ECMAScript är inte bunden till någon specifik webbläsare, faktiskt nämns det inte några metoder för användarinput/utmatning (detta skiljer sig från språk som C, som behöver bero på externa bibliotek för att utföra sådana uppgifter). Så vad är ECMAScript? Beskrivningen av ECMA-262-standarden (del 2) är följande:
“ECMAScript kan tillhandahålla kärnscriptprogrammeringsförmåga för olika typer av värdmiljöer, därför är det kärnscriptspråket definierat separat från någon specifik värdmiljö... ...”
Webbläsare är en värdmiljö för ECMAScript, men det är inte den enda. Faktiskt finns det obegränsade antal olika miljöer (t.ex. Nombas ScriptEase och Macromedia ActionScript som används både i Flash och Director MX) som kan innehålla ECMAScript-implementeringar. Så vad reglerar ECMAScript utöver webbläsare?
Enkelt uttryckt beskriver ECMAScript följande innehåll:
- Grammatik
- Typ
- Sats
- Nyckelord
- Reserverade ord
- Operatorer
- Objekt
ECMAScript är bara en beskrivning som definierar alla egenskaper, metoder och objekt för skriptspråk. Andra språk kan implementera ECMAScript som en funktionsgrundsats, JavaScript är ett exempel på detta:

Varje webbläsare har sin egen implementering av ECMAScript-gränssnittet, som sedan utökas med DOM och BOM (detta kommer att diskuteras i följande avsnitt). Det finns naturligtvis också andra implementeringar och utökningar av ECMAScript som språk, till exempel Windows Script Host (WSH), Macromedia ActionScript i Flash och Director MX, samt Nombas ScriptEase.
1. ECMAScript-versioner
ECMAScript är uppdelat i flera olika versioner och definieras i en standard som kallas ECMA-262. Som andra standarder kommer ECMA-262 att redigeras och uppdateras. När det finns en viktig uppdatering, publiceras en ny version av standarden. Den senaste versionen av ECMA-262 är 5.1, som publicerades i juni 2011.
Den första versionen av ECMA-262 är i princip lika med Netscape JavaScript 1.1, men alla kodsegment som är relaterade till webbläsare har tagits bort, samt några små justeringar. För det första kräver ECMA-262 stöd för Unicode-standarden (för att stödja flera språk). För det andra kräver den att objekt är plattformsoberoende (Netscape JavaScript 1.1 har faktiskt olika objektimplementeringar, till exempel Date-objektet, som är beroende av plattformen). Detta är varför JavaScript 1.1 och 1.2 inte överensstämmer med den första versionen av ECMA-262-standarden.
De flesta uppdateringar i ECMA-262 andra upplaga är redaktionella. Denna standarduppdatering genomfördes för att uppnå en strikt enhetlighet med ISO/IEC-16262, och det lades inte till, ändrades eller togs bort något specifikt innehåll. ECMAScript följer generellt inte andra upplagan.
ECMA-262 tredje upplagan är den första verkliga uppdateringen av standarden. Den erbjuder uppdateringar för hantering av strängar, feldefinitioner och numeriska utmatningar. Den inkluderar också stöd för reguljära uttryck, nya kontrollinstruktioner, try...catch-undantagshantering samt några små justeringar gjorda för att göra standarden internationell. Generellt sett markerar det att ECMAScript har blivit ett riktigt programmeringsspråk.
2. Vad är ECMAScript-konformitet
I ECMA-262 har ECMAScript-konformitet (konformitet) en tydlig definition. Ett skriptspråk måste uppfylla följande fyra grundläggande principer:
- Kompatibla implementeringar måste följa alla
- Kompatibla implementeringar måste stödja Unicode-teckenstandarden (UCS).
- Kompatibla implementeringar kan lägga till
- Kompatibla implementeringar kan stödja
Alla ECMAScript-implementeringar måste följa ovanstående standard.
3. Stöd för ECMAScript i webbläsare
Netscape Navigator 3.0 som innehåller JavaScript 1.1 lanserades år 1996. Därefter presenterades JavaScript 1.1-specifikationen som ett utkast till en ny standard till EMCA. Med JavaScript:s sensationella popularitet var Netscape mycket glada att börja utveckla version 1.2. Men det fanns ett problem, ECMA accepterade inte Netscapes utkast. Efter att Netscape Navigator 3.0 hade lanserats, släppte Microsoft IE 3.0. Denna version av IE innehöll JScript 1.0 (Microsofts egen implementation av JavaScript), som ursprungligen var avsett att kunna jämföras med JavaScript 1.1. Då, på grund av bristfälliga dokument och vissa oavsiktliga upprepade egenskaper, nådde JScript 1.0 långt ifrån nivån på JavaScript 1.1.
Innan ECMA-262 första versionen fastställdes, släpptes Netscape Navigator 4.0 med JavaScript 1.2 1997. Senare under året accepterades och standardiserades ECMA-262. Därför är JavaScript 1.2 inte kompatibel med ECMAScript första versionen, även om ECMAScript skulle baseras på JavaScript 1.1.
Nästa steg för JScript var JScript 3.0 som lanserades i IE 4.0 (version 2.0 lanserades tillsammans med IIS 3.0, men inkluderades inte i webbläsaren). Microsoft marknadsförde JScript 3.0 som världens första verkligt ECMA-standardenligt skriptspråk. Då var ECMA-262 fortfarande inte slutgiltigt fastställd, så drabbades JScript 3.0 av samma öde som JavaScript 1.2 - det lyckades inte att uppfylla den slutliga ECMAScript-standarden.
Netscape valde att uppgradera sitt JavaScript-utseende i Netscape Navigator 4.06. JavaScript 1.3 gjorde Netscape slutligen helt kompatibelt med ECMAScript första versionen. Netscape lade till stöd för Unicode-standarden och möjliggjorde att alla objekt behöll de nya egenskaper som introducerades i JavaScript 1.2 medan de uppnådde plattformsoberoende.
När Netscape offentliggjorde sin källkod som Mozilla-projektet, var planen att JavaScript 1.4 skulle integreras i Netscape Navigator 5.0. Emellertid förstörde en våghalsig beslut att helt omgöra Netscapes kod detta arbete. JavaScript 1.4 publicerades bara som ett server-side skriptspråk för Netscape Enterprise Server och har inte inkluderats i webbläsare sedan dess.
Idag följer alla huvudsakliga webbläsare ECMA-262 tredje versionen.
下面的表格列出了大部分流行的 Web 浏览器中的 ECMAScript 支持:
Webbläsare | DOM-kompatibilitet |
---|---|
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(文档对象模型)是 HTML 和 XML 的应用程序接口(API)。DOM 将把整个页面规划成由节点层级构成的文档。HTML 或 XML 页面的每个部分都是一个节点的衍生物。请考虑下面的 HTML 页面:
<html> <head> <title>Sample Page</title> </head> <body> <p>hello world!</p> </body> </html>
这段代码可以用 DOM 绘制成一个节点层次图:

DOM 通过创建树来表示文档,从而使开发者对文档的内容和结构具有空前的控制力。用 DOM API 可以轻松地删除、添加和替换节点。
1. 为什么 DOM 必不可少
自从 IE 4.0 和 Netscape Navigator 4.0 开始支持不同形态的动态 HTML(DHTML),开发者首次能够在不重载网页的情况下修改它的外观和内容。这是 Web 技术的一大飞跃,不过也带来了巨大的问题。Netscape 和微软各自开发自己的 DHTML,从而结束了 Web 开发者只编写一个 HTML 页面就可以在所有浏览器中访问的时期。
业界决定必须要做点什么以保持 Web 的跨平台特性,他们担心如果放任 Netscape 和微软公司这样做,Web 必将分化为两个独立的部分,每一部分只适用于特定的浏览器。因此,负责指定 Web 通信标准的团体 W3C(World Wide Web Consortium)就开始制定 DOM。
2. DOM 的各个 level
DOM Level 1 föreslogs av W3C i oktober 1998. Det består av två moduler, nämligen DOM Core och DOM HTML. Den första tillhandahåller en XML-baserad dokumentstruktur för att komma åt och manipulera dokumentets alla delar; den andra lägger till specifika HTML-objekt och metoder för att utöka DOM Core.
Observera att DOM inte är exklusivt för JavaScript, faktiskt har många andra språk implementerat det. Dock har DOM i webbläsare redan implementerats med ECMAScript och är nu en stor del av JavaScript-språket.
DOM Level 1 är bara ett mål, nämligen att planera dokumentets struktur, medan målen för DOM Level 2 är mycket bredare. Utökningen av den ursprungliga DOM-till DOM Core som introducerades av nivå 1 har också lagt till stöd för XML-ns (XML-namespace), och stöd för mus- och användargränssnittshändelser (DHTML har omfattande stöd för detta), omfattning, traversering (återkommande körning av metoder i DOM-dokumentet) och stöd för CSS (cascading style sheets) via objektgränssnitt.
DOM Level 2 introducerade flera nya DOM-moduler för att hantera nya gränssnittstyper:
- DOM-visning - beskriver spårning av olika vyer av dokumentet (dvs. innan och efter CSS-stilisering av dokumentet)
- DOM-händelser - beskriver gränssnitt för händelser
- DOM-stil - beskriver gränssnitt för att hantera CSS-baserade stilar
- DOM-trädförlopp och omfattning - beskriver gränssnitt för att traversera och manipulera dokumentträdet
DOM Level 3 introducerar metoder för att ladda och behålla dokument på ett enhetligt sätt (innehåller i den nya modulen DOM Load and Save) samt metoder för att validera dokument (DOM Validation), vilket ytterligare utökar DOM. På nivå 3 utökas DOM Core för att stödja alla XML 1.0-funktioner, inklusive XML Infoset, XPath och XML Base.
När man lär sig DOM kan man möta någon som refererar till DOM Level 0.Observera att det inte finns någon standard för DOM Level 0, det är bara en historisk referenspunkt för DOM (DOM Level 0 avser den ursprungliga DHTML som stöds av IE 4.0 och Netscape Navigator 4.0).
3. Andra DOM
Förutom DOM Core och DOM HTML har flera andra språk publicerat sina egna DOM-standarder. Dessa språk är baserade på XML, och varje DOM lägger till specifika metoder och gränssnitt för motsvarande språk:
- Skalbar Vektorgrafik (SVG) 1.0
- Digitala markeringsspråk (MathML) 1.0
- Synchroniserad multimediakodningsspråk (SMIL)
Anmärkning:Om du vill lära dig mer om relaterade ämnen, besök CodeW3C:s SMIL-lärjardom och SVG-lärjardom.
Förutom detta har också andra språk utvecklat sina egna DOM-implementeringar, såsom Mozillas XML-användargränssnittsspråk (XUL). Men bara de ovan nämnda språken är rekommenderade standarder från W3C.
Stöd för DOM i webbläsare
DOM var redan ett standard innan webbläsare började implementera den. IE försökte DOM första gången i version 5.0, men det var först från version 5.5 som IE verkligen började stödja DOM, och IE 5.5 implementerade DOM Nivå 1. Från och med den tiden har IE inte introducerat några nya DOM-funktioner.
Netscape implementerade DOM-stöd först från Netscape 6 (Mozilla 0.6.0). För närvarande har Mozilla det bästa DOM-stödet, som implementerar fullständiga Nivå 1, nästan alla Nivå 2 och en del av Nivå 3. (Mozillas utvecklingsteam har som mål att bygga en webbläsare som är 100% kompatibel med standarden, och deras arbete har gett resultat.)
Opera tillsammans med 7.0-versioner började stödja DOM, och Safari har också implementerat de flesta av DOM Nivå 1. De är nästan alla på samma nivå som IE 5.5, och i vissa fall till och med överträffar IE 5.5. Men när det gäller DOM-stöd är alla webbläsare betydligt bakom Mozilla. Tabellen nedan visar det vanliga stödet för DOM från olika webbläsare.
Webbläsare | DOM-kompatibilitet |
---|---|
Netscape Navigator 1.0 - 4.x | - |
Netscape 6.0+ (Mozilla 0.6.0+) | Nivå 1, Nivå 2, Nivå 3 (delar) |
IE 2.0 - 4.x | - |
IE 5.0 | Nivå 1 (minst) |
IE 5.5+ | Nivå 1 (n儿stan alla) |
Opera 1.0 - 6.0 | - |
Opera 7.0+ | Nivå 1 (n儿stan alla), Nivå 2 (delar) |
Safari 1.0+/Konqueror ~ 2.0+ | Nivå 1 |
Anmärkning:Om du vill lära dig mer om DOM-kunskap, besök CodeW3C:s HTML DOM-lärjardom och XML DOM-lärjardom.
BOM
IE 3.0 och Netscape Navigator 3.0 erbjudde en funktion - BOM (Browser Object Model), som tillät åtkomst och manipulation av webbläsarfönster. Genom att använda BOM kan utvecklare flytta fönster, ändra texten i statusfältet och utföra andra åtgärder som inte är direkt relaterade till sidinnehållet. Det som gör BOM unik och ofta misstänksam är att det bara är en del av JavaScript, utan några relaterade standarder.
BOM hanterar huvudsakligen webbläsarfönster och ramar, men vanliga webbläsarspecifika JavaScript-utökningar betraktas ofta som en del av BOM. Dessa utökningar inkluderar:
- Öppna ett nytt webbläsarfönster
- Flytta, stänga webbläsarfönstret och justera fönstrets storlek
- Objekt som tillhandahåller detaljerad information om webbläsaren
- Objekt som tillhandahåller detaljerad information om användarens skärmupplösning
- Stöd för cookies
- IE har utökat BOM genom att lägga till ActiveXObject-klassen, som kan instantieras som ActiveX-objekt med JavaScript
Eftersom det inte finns några relaterade BOM-standarder har varje webbläsare sitt egna BOM-implementation. Det finns några faktiska standarder, som att ha ett fönsterobjekt och ett navigeringsobjekt, men varje webbläsare kan definiera sina egna egenskaper och metoder för dessa objekt eller andra objekt.
Se också:
- Föregående sida Historik för JavaScript
- Nästa sida Syntaks för ECMAScript