Was ist eigentlich JavaScript?

95

All dies begann, als ich nach einer Möglichkeit suchte, meine Webseite auf JavaScript-Konformität zu testen, wie beispielsweise den W3C HTML Validator . Ich habe noch keinen gefunden. Also lass es mich wissen, wenn du etwas weißt ...

  1. Ich habe nach der offiziellen JavaScript-Seite gesucht und ECMA Script gefunden . Diese Leute haben eine Skriptsprache standardisiert (ich habe keine Lust mehr, sie als JavaScript zu bezeichnen!) Und sie als ECMA-262 ( Wikipedia ) bezeichnet. Ihre neueste Arbeit ist Edition 5.1

  2. JavaScript wurde von der Mozilla Corporation entwickelt und ihre letzte stabile Version ist 1.8.5 ( siehe dies ), die auf der ECMA-Edition 5.1 basiert

  3. Die verlinkte Wikipedia-Seite erwähnt Dialekte. Mozillas JavaScript 1.8.5 wird zusammen mit JScript 9 (IE) und JavaScript (Chrome V8 [ Wiki ]) und vielen anderen als Dialekt aufgeführt . Muss ich verstehen, dass JavaScript 1.8.5 ein Derivat von ECMA-262 ist und SpiderMonkey [ Wiki ] eine Engine ist, die es ausführt ? Und Chrome hat einen eigenen Dialekt und V8-Engine ist das Programm, das es ausführt?

Was ich bei all diesen Dialekten, die auf ECMA-262 basieren, nicht mehr verstehen kann, ist "Was ist JavaScript ?". Gibt es wirklich browserübergreifende Skriptsprachen? Treffen sich die verschiedenen Implementierer, um die Kompatibilität der Dialektkreuze zu vereinbaren? Ist das Aufwand ECMA?

Lord Loh.
quelle
10
Sie haben vergessen, ActionScript zu erwähnen, einen ECMA-Dialekt, der nichts mit dem zu tun hat, was Sie vielleicht als Javascript bezeichnen.
DaveRandom
4
Nicht so sehr für die Konformität (wie Sie bereits hervorgehoben haben), aber jslint eignet sich sehr gut zum Überprüfen von Code.
SomeKittens
2
@ MadaraUchiha - Ich stimme zu "benutze einfach jQuery. Alles wird in Ordnung sein." wird nicht in Ordnung sein. Deshalb habe ich angefangen, dies zu erforschen. Meine Seite bharath.lohray.com funktioniert gut mit Chrome und Firefox und der W3C-Validator erzeugt auch keine Fehler, aber er ist auf dem neuesten IE absolut umwerfend ! Außerdem kann ich, so sehr ich die Idee von Leuten bei anybrowser.org/campaign mag , nicht wirklich browserübergreifend sein!
Lord Loh.
7
Über Ihre Seite ist das Scrollen sehr ärgerlich und übertrieben. Nur IMO. Und der Titel "Lord" klingt höllisch pompös, auch wenn Sie tatsächlich ein Lord sind.
NullUserException
11
Es ist unnötig auffällig. Sie sehen keine Posts, die auf SE auf und ab gleiten. Wenn dies eine professionell aussehende Website sein soll und Sie dennoch Übergänge wünschen, verwenden Sie etwas Diskreteres wie Einblenden / Ausblenden.
NullUserException

Antworten:

96

Nahezu alle ausgereiften Sprachen werden durch eine Spezifikation definiert, und Compiler oder Interpreter versuchen, dem in dieser Spezifikation definierten Standard zu folgen. Dies gelingt jedoch nur sehr selten, es sei denn, der Standard wird vom Autor der Sprache definiert.

Sie finden den C ++ 2003-Standard , die C # 4-Spezifikation , die Java 7-Spezifikation und vieles mehr online. Viele von diesen haben ECMA- oder ISO-Standardisierungsnummern. Dies sind nur Organisationen, bei denen Sie einen Standard registrieren und offizieller machen können.

Ruby hat die Dinge in der Vergangenheit ein wenig anders gemacht und eine Reihe ausführbarer Tests als Spezifikation verwendet . Wenn Sie also einen Interpreter schreiben und ihn als Standard-Ruby bezeichnen möchten, müssen Sie nur einen Interpreter erstellen, der alle diese Tests bestanden hat. Aber selbst Ruby wird wahrscheinlich irgendwann zu einer formaleren Spezifikation .

Javascript ist nicht anders, außer möglicherweise in der Art und Weise, wie es sich entwickelt hat.

Javascript wurde zuerst von Netscape erstellt. Sie nannten es LiveScript, aber es sah Java ähnlich und sie schlossen einen Vertrag mit Sun über den Namen, was sowohl der Vermarktung von Netscape als auch von Java zugute kam. Microsoft hatte VBScript und (wahrscheinlich aus mutmaßlichen Gründen) kopierte im Grunde genommen Javascript, aber der Name gehörte Sun, daher nannten sie es frech JScript.

Obwohl JScript in der Syntax sehr ähnlich zu Javascript ist, wurde COM häufig verwendet. IE5 und 6 instanziieren beispielsweise ein XMLHttpRequest-Objekt mithilfe von new ActiveXObject("Microsoft.XMLHTTP");.

Und so entstanden parallele, ähnliche, aber auch unterschiedliche "Dialekte" von Javascript. Im Laufe der Zeit haben verschiedene Gruppen, die Browser mit einem geringeren Marktanteil als IE besitzen, versucht, die Sprache zu standardisieren, und Microsoft hat sich jahrelang dagegen gewehrt. Bis V8.

V8 war schnell. Es setzte einen ganz neuen Marktstandard. Alles andere sah schlecht aus.

Durch verschiedene Kartellverfahren gegen Microsoft verlor IE Marktanteile. Plötzlich lag es im Interesse von Microsoft, die Standardisierung zu unterstützen. Wir sind noch nicht da, aber es ist auf dem richtigen Weg.

In der Zwischenzeit war V8 Open Source, was es den Leuten ermöglichte, sich neue Verwendungen für einen schnellen Javascript-Parser wie Node.JS auszudenken .

Aber um auf Ihre Frage zurückzukommen: Was ist Javascript? Dies ist der gebräuchliche (und ursprüngliche) Name für ECMAScript, eine Spezifikation für eine prototypische Sprache, die häufig, jedoch nicht ausschließlich, zum Navigieren und Bearbeiten des Domänenobjektmodells in einem Browser verwendet wird.

ECMA-262 ist nur die Standarddefinition, ebenso wie ECMA-334 die Standarddefinition für C #. ECMAScript war der einzige Name, auf den sich alle Interessenten bereits 1999 bei der Erstellung von ECMA-262 einigen konnten.

pdr
quelle
7
Wenn ich Ihre Antwort mehr als einmal positiv bewerten könnte, hätte ich es getan :-) Dies trägt dazu bei, einige Dinge klarer zu machen. Die C-Compiler-Analogie macht die Situation nur ein wenig verständlich :-) Außer, dass JavaScript nicht als Binärdatei kompiliert ist und Endbenutzer nicht / quasi-funktionale Skripte sehen. Muss ich also verstehen, dass ich eine Seite nicht nach einem Standard erstellen kann und hoffe, dass sie noch auf allen Browsern gleich funktioniert? (und doch das maßgebliche Wort).
Lord Loh.
1
@LordLoh. Das ist richtig. Sie können jedoch Bibliotheken wie jQuery und Prototype erlauben, die Unterschiede für Sie zu abstrahieren.
pdr
Dieser Beitrag und die Recherche begannen, als die jQuery-Animation auf IE9 nicht funktionierte und ich die Idee der anybrowser.org-Kampagne belogen habe und hoffte, mich an einen Standard halten zu können. HTML5 / CSS3 / JS. Der JS wurde zum Käfer in meiner Motorhaube.
Lord Loh.
1
@LordLoh. Ich wäre mir nicht so sicher, ob das die Schuld von jQuery ist. Ein kurzer Blick zeigt Probleme mit Ihrem HTML-Code (z. B. fehlende Anführungszeichen). Wenn Sie Ihr Javascript auf diese Weise minimieren, kann es zu merkwürdigen Ergebnissen kommen, wenn Sie nicht sehr genau waren. Ich erinnere mich an ein Problem vor langer Zeit, bei dem ich ein Semikolon verpasst hatte und es erst nach der Komprimierung in einem der wichtigsten Browser fehlgeschlagen ist. jQuery ist ziemlich stabil und sollte gut mit IE9 funktionieren.
pdr
5
@LordLoh. console.log ist dein Problem. Es funktioniert nur, wenn Sie die Entwickler-Symbolleiste öffnen (und somit das Objekt "Konsole" erstellen).
pdr
23

Javascript ist eine häufig verwendete Implementierung von ECMAScript. Es ist eine sehr ähnliche Situation wie bei der Scheme-Familie . In Schema haben Sie eine stark formalisierte Spezifikation. Die aktuelle Version ist R6RS, obwohl R5RS ab diesem Beitrag der am weitesten verbreitete Standard ist. Die Implementierungen sind aufgrund des Alters und der allgemeinen Philosophie von Scheme verstreuter als die von ECMAScript.

Javascript ist mittlerweile vor allem aufgrund des explosionsartig wachsenden Marktanteils von Mozillas Firefox und Googles Chrome weit verbreitet. Ursprünglich hatte es mit Netscape Navigator Fuß gefasst, das sich schließlich in den Mozilla-Browser und dann in Firefox (und Iceweasel, wenn Sie mit der Scheme-Menge laufen) verwandelte.

Jetzt wird es hier ein bisschen krass. Die meiste Leistung von Javascript kommt vom Parser und der Engine, die es laufen lässt. Hier machen sich die tatsächlichen Unterschiede zwischen den Browsern bemerkbar. Spidermonkey führt Javascript anders aus als V8. Javascript hat immer noch raue Stellen wie das Fehlen einer vollständig gemeinsamen Bibliothek, obwohl daran gearbeitet wird.

Wenn Javascript also C ++ wäre, wäre ECMAScript C ++ 11, wobei UNIX und G ++ dem "Standard" am nächsten kommen, während C ++ für .NET und Objective C ++ viel weiter entfernt liegen als Actionscript von ECMAScript

Weltingenieur
quelle