JScript-Zuweisungen und Gleichheit

Aktualisiert: November 2007

In JScript wird einer Variablen durch den Zuweisungsoperator ein Wert zugewiesen. Ein Gleichheitsoperator vergleicht zwei Werte miteinander.

Zuweisungen

Wie in einer Vielzahl von Programmiersprachen wird auch in JScript das Gleichheitszeichen (=) verwendet, um einer Variablen einen Wert zuzuweisen. Das Gleichheitszeichen ist der Zuweisungsoperator von JScript. Der linke Operand des =-Operators muss ein Lvalue sein, d. h. eine Variable, ein Arrayelement oder eine Objekteigenschaft.

Der rechte Operand des =-Operators muss ein Rvalue sein. Rvalue kann ein willkürlicher Wert eines beliebigen Typs sein, beispielsweise auch ein Wert, der das Ergebnis eines Ausdrucks ist. Im Folgenden ein Beispiel für eine JScript-Zuweisungsanweisung.

anInteger = 3;

JScript interpretiert diese Anweisung wie folgt:

"Den Wert 3 der Variablen anInteger zuweisen."

oder

"anInteger nimmt den Wert 3 an."

Eine Zuweisung ist stets erfolgreich, wenn die Variable in der Anweisung nicht durch die Typanmerkung an einen bestimmten Datentyp gebunden wurde. Andernfalls versucht der Compiler, Lvalue in den Datentyp von Rvalue zu konvertieren. Wenn die Konvertierung niemals erfolgreich durchgeführt werden kann, generiert der Compiler einen Fehler. Falls die Konvertierung für einige Werte erfolgreich ist, für andere jedoch fehlschlägt, gibt der Compiler eine Warnung aus, wonach die Konvertierung möglicherweise fehlschlägt, wenn der Code ausgeführt wird.

Im folgenden Beispiel wird der in der Variablen i gespeicherte integer-Wert in einen double-Wert umgewandelt, wenn er der Variablen x zugewiesen wird.

var i : int = 29;
var x : double = i;

Weitere Informationen finden Sie unter Typkonvertierung.

Gleichheit

Anders als in einigen anderen Programmiersprachen wird in JScript das Gleichheitszeichen nicht als Vergleichsoperator, sondern ausschließlich als Zuweisungsoperator verwendet. Zum Vergleichen zweier Werte steht Ihnen entweder der Gleichheitsoperator (==) oder der Identitätsoperator (===) zur Verfügung.

Der Gleichheitsoperator vergleicht primitive Zeichenfolgen, Zahlen und boolean-Daten anhand ihres Werts. Wenn zwei Variablen den gleichen Wert haben, gibt der Gleichheitsoperator nach der Typkonvertierung (falls erforderlich) true zurück. Objekte (einschließlich von Array-Objekten, Function-Objekten, String-Objekten, Number-Objekten, Boolean-Objekten, Error**-Objekten,**Date-Objekten und RegExp-Objekten) werden als Verweis verglichen. Selbst wenn zwei Objektvariablen den gleichen Wert haben, ergibt ein Vergleich nur dann true, wenn sie auf exakt dasselbe Objekt verweisen.

Der Identitätsoperator vergleicht sowohl den Wert als auch den Typ zweier Ausdrücke. Nur wenn beide Ausdrücke mit dem Identitätsoperator als gleich ausgewertet werden und der Datentyp für beide Operanden gleich ist, wird true zurückgegeben.

Hinweis:

Der Identitätsoperator unterscheidet nicht zwischen den verschiedenen numerischen Datentypen. Es ist sehr wichtig, dass Ihnen die Unterschiede zwischen dem Zuweisungsoperator, dem Gleichheitsoperator und dem Identitätsoperator klar sind.

Vergleiche, die Sie in Skripts durchführen, liefern stets ein Ergebnis vom Typ Boolean. Betrachten Sie die folgende JScript-Codezeile.

y = (x == 2000);

Hier wird überprüft, ob der Wert der Variablen x der Zahl 2000 entspricht. Wenn ja, wird der boolesche Wert true als Vergleichsergebnis zurückgegeben und der Variablen y zugewiesen. Wenn x ungleich 2000 ist, wird der boolesche Wert false zurückgegeben und y zugewiesen.

Der Gleichheitsoperator führt eine Typkonvertierung durch, um zu prüfen, ob die Werte identisch sind. In der folgenden JScript-Codezeile wird das Zeichenfolgenliteral "42" zunächst in eine Zahl konvertiert, bevor der Vergleich mit der Zahl 42 durchgeführt wird. Das Ergebnis lautet true.

42 == "42";

Objekte werden anhand von verschiedenen Regeln miteinander verglichen. Das Verhalten des Gleichheitsoerators hängt vom Typ der Objekte ab. Wenn die Objekte Instanzen einer Klasse sind, die mit einem Gleichheitsoperator definiert ist, hängt der zurückgegebene Wert von der Implementierung des Gleichheitsoperators ab. Klassen, die einen Gleichheitsoperator bereitstellen, können in JScript nicht definiert werden; in anderen .NET Framework-Sprachen sind solche Klassendefinitionen jedoch möglich.

Objekte ohne einen definierten Gleichheitsoperator, z. B. ein auf dem JScript-Object-Objekt basierendes Objekt oder eine Instanz einer JScript-Klasse, werden nur dann als gleich ausgewertet, wenn beide Objekte auf das gleiche Objekt verweisen. Das bedeutet, dass zwei unterschiedliche Objekte, die die gleichen Daten enthalten, als ungleich ausgewertet werden. Dieses Verhalten wird im folgenden Beispiel veranschaulicht:

// A primitive string.
var string1 = "Hello";
// Two distinct String objects with the same value.
var StringObject1 = new String(string1);
var StringObject2 = new String(string1);

// An object converts to a primitive when
// comparing an object and a primitive.
print(string1 == StringObject1);   // Prints true.

// Two distinct objects compare as different.
print(StringObject1 == StringObject2);   // Prints false.

// Use the toString() or valueOf() methods to compare object values.
print(StringObject1.valueOf() == StringObject2);   // Prints true.

Gleichheitsoperatoren sind insbesondere in Bedingungsanweisungen in Steuerstrukturen von Nutzen. Dabei wird ein Gleichheitsoperator mit einer Anweisung verknüpft und darin verwendet. Betrachten Sie das folgende JScript-Codebeispiel.

if (x == 2000)
   z = z + 1;
else
   x = x + 1;

Die if...else-Anweisung in JScript führt eine Aktion durch (hier z = z + 1), wenn der Wert von x 2000 ist, und eine alternative Aktion (x = x + 1), wenn der Wert von x nicht 2000 ist. Weitere Informationen hierzu finden Sie unter Bedingte Strukturen in JScript.

Der Identitätsoperator (===) führt Typkonvertierungen ausschließlich für numerische Datentypen aus. Dies bedeutet, dass die ganze Zahl 42 als identisch mit der Zahl 42 vom Typ double betrachtet wird, aber keine von beiden mit der Zeichenfolge "42" identisch ist. Dieses Verhalten wird im folgenden JScript-Code veranschaulicht.

var a : int = 42;
var b : double = 42.00;
var c : String = "42";
print(a===b); // Displays "true".
print(a===c); // Displays "false".
print(b===c); // Displays "false".

Siehe auch

Konzepte

Boolesche Daten

Typkonvertierung

Weitere Ressourcen

Tour durch die JScript-Sprache

Bedingte Strukturen in JScript