Entwicklung und aktuelle Version

Microsoft JScript ist die Microsoft Implementierung von JavaScript. 
Version 1.0 wurde mit dem Internet Explorer 3.0 eingeführt. Internet Explorer 4 implementierte Version 3.0.
Einen Überblick über die Versionen findet sich hier.
Zur Zeit befindet sich JScript in der Version 5.5

Einführung

Ein Tutorial über JScript findet sich unter http://dc.gfz-potsdam.de/~palm/javascript/doc/jstutor/ oder das original Microsoft Benutzerhandbuch unter http://www.microsoft.com/germany/scripting/jscript/doc/jsconJScriptUsersGuide.htm .

Da beide Tutorials sehr schön strukturiert und leicht zu lesen sind, werde ich hier nur mehr eine kurze Zusammenfassung geben und danach dir Grundlegenden Unterschiede zwischen JScript und JavaScript aufzeigen.

JScript ist eine interpretierte, objektorientierte Skriptsprache.

Variablen

In JScript müssen Variablen Deklariert werden. Sie sind jedoch nicht typisiert. Der Typ einer Variablen ergibt sich aus den Daten die dieser Variablen zugewiesen werden. Die Variablendeklaration muss jedoch nicht explizit sein (implizit durch Zuweisung).

Datentypen

JScript kennt folgende Datentypen:

Wobei Null und Undefined 2 spezielle Datentypen sind. Für Boolean ist wie in C 0 = false und 1 = true.

Steuern des Programmablaufs

Es gibt folgende Konstrukte zum Steuern des Programmablaufs:

do/while

Die do/while Schleife führt die Anweisungen einmal aus und überprüft danach den Ausdruck ob ein weiterer Durchlauf durchgeführt werden soll (Durchlaufschleife).

for/in

Die for/in Schleife führt die Anweisungen für jede Eigenschaft eines Objekts oder für jedes Element eines Datenfeldes aus.

Arrays

Arrays sind spezielle Objekte die über eine magische Eigenschaft length verfügen. Diese wird automatisch verwaltet und gesetzt sobald Elemente einem Array hinzugefügt werden. Die Indizierung beginnt mit 0. Es ist möglich beim erstellen mehrere Elemente auszulassen. Die length Eigenschaft wird jedoch so gesetzt als ob keine Lücke währe. 

Objekte

Objekte werden mit new erzeugt. Alle Objekte besitzen expando-Eigenschaften. Damit können Objekten Eigenschaften hinzugefügt werden. Bei Array beeinflussen diese die length Eigenschaft nicht.

Es gibt 2 Arten auf die Eigenschaften zuzugreifen:

  1. Mit "." : Objekt.Eigenschaft
  2. Mit "[]" : Objekt["Eigenschaft"] 

Will man selbst Objekte erstellen so schreibt man eine Funktion die alle Objektelemente mit this. hinzufügt.

// Pasta ist ein Konstruktor, der vier Parameter erhält.
function Pasta(Getreide, Breite, Form, enthaeltEi)
{

// Aus welchem Getreide?
this.Getreide = Getreide;

// Breite (Zahl)
this.Breite = Breite;

// Querschnitt (Zeichenfolge)
this.Form = Form;

// Ist Eigelb als Bindemittel enthalten? (boolescher Wert)
this.enthaeltEi = enthaeltEi;

}

Es kann nun mit new Pasta (...) eine neues Pastaobjekt angelegt werden. Die Eigenschaften von diesem Objekt können zur Laufzeit erweitert werden indem man die expando-Funktionalität auf pasta.protoype anwendet.

Pasta.prototype.Lebensmittelgruppe = "Kohlenhydrate"

Reservierte Wörter

break delete function return typeof
case do if switch var
catch else in this void
continue false instanceof throw while
debugger finally new true with
default for null try  

Zukünftig reservierte Wörter

abstract double goto native static
boolean enum implements package super
byte export import private synchronized
char extends int protected throws
class final interface public transient
const float long short volatile

Beim Auswählen von Bezeichnern ist es außerdem wichtig, Wörter zu vermeiden, die bereits Namen von intrinsischen JScript-Objekten oder -Funktionen sind, z. B. String oder parseInt.

Rekursion

Wie aus anderen Programmiersprachen bekannt kann man auch in JScript Rekursion verwenden.

// Funktion zur Berechnung von Fakultäten. Wenn eine ungültige
// Zahl übergeben wird (d. h. eine Zahl, die kleiner als Null ist), wird
// -1 angezeigt, um einen Fehler anzugeben. Anderenfalls wird die
// Zahl in die nächste Ganzzahl konvertiert und die zugehörige Fakultät
// angezeigt.
function Fakultaet(eineZahl)  {
eineZahl = Math.floor(eineZahl);  
        // Ist die Zahl keine Ganzzahl, so wird sie abgerundet.
if (eineZahl < 0)  {  // Negative Zahlen sind nicht zulässig.
    return -1;
    }
      if (eineZahl == 0)  {  
            // Ist die Zahl 0, so ist die Fakultät gleich 1.
      return 1;
      }
        else return (eineZahl * Fakultaet(eineZahl - 1));  
                // Rekursiver Aufruf.
}

Gültigkeitsbereich von Variablen

JScript kennt zwei Gültigkeitsbereiche: global und lokal. Wenn Sie eine Variable außerhalb einer Funktionsdefinition deklarieren, so ist diese Variable global, und ihr Wert kann im gesamten Programm abgerufen und verändert werden. Wenn Sie eine Variable innerhalb einer Funktionsdefinition deklarieren, ist diese Variable lokal. Sie wird bei jeder Ausführung der Funktion neu erstellt und anschließend wieder gelöscht. Ein Zugriff auf die Variable von außen ist nicht möglich.

JScript unterstützt nicht den Gültigkeitsbereich von Blöcken. Zu Beachten ist, dass sich Variablen so verhalten, als wären sie zu Beginn des jeweiligen Gültigkeitsbereiches deklariert worden.

Kopieren, Übergeben und Vergleichen von Daten

Zahlen und boolsche Werte werden nach Wert (by value) kopiert, übergeben und verglichen. Objekte, Datenfelder und Funktionen werden by reference kopiert, übergeben und verglichen. Um nun z.B.: die Elemente eines Arrays zu Vergleichen um somit zu bestimmen ob 2 Arrays den selben Inhalt haben, muss der Vergleich mit toString() durchgeführt werden.

Zeichenfolgend werden by reference kopiert und übergeben aber nach Wert (by value) verglichen.

Escape-Sequenz

JScript unterstützt folgende Escape-Sequenzen um nicht druckbare Zeichen darzustellen: \b \f \n \r \t \' \" \\

Vergleich Zwischen JScript und JavaScript

Der wesentliche Unterschied zwischen JScript und JavaScript ist wie auf die Elemente des Dokuments zugegriffen wird. Dazu hier noch kurz die Beschreibung des Dokument Objekt Models.

Dokument Objekt Model von Microsoft

Das DOM ist Baumartig aufgebaut. Die Wurzel ist das document. Danach kommen die Blätter in der Art wie sie in den HTML-Tags geschachtelt sind. Bsp: document.myForm1.Textfeld1.value um auf den Inhalt des Textfeldes Textfeld1 im Formular myForm1 zuzugreifen.

Jedes Objekt enthält 2 Collections: all und children. In all werden alle Elemente aufgeführt die sich unter diesem Element befinden und in children nur die direkten Kinder dieses Elementes.

Es kann somit mit document.all.<name> auf alle Elemente des Dokuments zugegriffen werden.

Unterschiede zwischen JScript und JavaScript

Der Hauptunterschied besteht darin, daß IJScript die all und die children Collections besitzt, wogegen JavaScript document.layer hat.

Vor allem wirkt sich das bei der verwendung von Styles aus.

Netscape: document.layer["layerName"].document.bgColor = "red";
Internet Explorer: document.all["layerName"].style.backgroundColor = "red"

Daher muss eine Unterscheidung gemacht werden zwischen Internet Explorer und Netscape. Diese kann wie folgt aussehen:

if (document.layers)
    document.layers.logo.visibility = "hidden";
else if (document.all)
    document.all.logo.style.visibility = "hidden";
else if (document.documentElement)
    document.getElementById("logo").style.visibility = "hidden";

Diese Unterscheidung muss bei jedem Zugriff auf Objekte die sich nicht gleich verhalten gemacht werden.