Kopieren, Übergeben und Vergleichen von Daten
Aktualisiert: November 2007
Die Art und Weise, wie JScript Daten kopiert, übergibt und vergleicht, hängt davon ab, wie die Daten gespeichert werden. Dies ist wiederum abhängig vom Datentyp. In JScript werden Daten entweder als Wert oder anhand eines Verweises gespeichert.
Als Wert oder als Verweis
JScript kopiert, übergibt und vergleicht Zahlen und boolesche Werte (true und false) als Wert. Bei diesem Prozess wird ein Bereich im Computerspeicher reserviert, in den der Wert der ursprünglichen Zahl kopiert wird. Wird das Original dann geändert, ist die Kopie davon nicht betroffen (und umgekehrt), da es sich um zwei getrennte Entitäten handelt. Zwei Zahlen oder boolesche Werte gelten als gleich, wenn sie denselben Wert haben.
Objekte, Arrays und Funktionen werden in JScript als Verweis kopiert, übergeben und verglichen. Dabei wird im Prinzip ein Verweis auf das ursprüngliche Element erstellt, der dann wie eine Kopie verwendet wird. Wenn Sie dann das ursprüngliche Element ändern, werden sowohl das Original als auch die Kopie (und umgekehrt) geändert. Tatsächlich ist jedoch nur eine Entität vorhanden, denn die Kopie ist nur ein Verweis auf die Daten.
Um einen Vergleich anhand eines Verweises erfolgreich durchführen zu können, müssen die beiden Variablen exakt auf die gleiche Entität verweisen. Beispielsweise sind zwei unterschiedliche Array-Objekte bei einem Vergleich immer ungleich, auch wenn sie dieselben Elemente enthalten. Eine der Variablen muss ein Verweis auf die andere Variable sein, damit der Vergleich erfolgreich durchgeführt werden kann. Vergleichen Sie die Ergebnisse der toString()-Methode, um zu prüfen, ob zwei Arrays dieselben Elemente enthalten.
In JScript werden außerdem Zeichenfolgen als Verweis kopiert und übergeben. Wie die Zeichenfolgen miteinander verglichen werden, hängt davon ab, ob sie Objekte sind. Zwei (mit new String("xyz")) erstellte String-Objekte werden als Verweis miteinander verglichen. Wenn eine der Zeichenfolgen (oder beide) ein Literal oder eine primitive Zeichenfolge ist, werden sie als Wert miteinander verglichen. Weitere Informationen finden Sie unter JScript-Zuweisungen und Gleichheit.
Hinweis: |
---|
Der ASCII- und der ANSI-Zeichensatz sind so aufgebaut, dass Großbuchstaben vor Kleinbuchstaben rangieren. So ist bei einem Vergleich "Zoo" kleiner als "adler". Sie können toUpperCase() oder toLowerCase() für beide Zeichenfolgen aufrufen, wenn Sie einen Vergleich ohne Berücksichtigung von Groß- und Kleinschreibung durchführen möchten. |
Funktionsparameter
Wenn JScript einen Parameter als Wert an eine Funktion übergibt, wird eine separate Kopie dieses Parameters erstellt, die nur innerhalb der Funktion vorhanden ist. Obwohl Objekte und Arrays als Verweis übergeben werden, wird, wenn ein neuer Wert in der Funktion diese direkt überschreibt, der neue Wert nicht außerhalb der Funktion widergespiegelt. Nur Änderungen an den Eigenschaften von Objekten oder an Elementen von Arrays sind außerhalb der Funktion sichtbar.
Beispielsweise hat das folgende Programm zwei Funktionen. Die erste Funktion überschreibt den Eingabeparameter, wodurch verhindert wird, dass Änderungen an dem Parameter sich auf das ursprüngliche Eingabeargument auswirken. Die zweite Funktion änder die Eigenschaft des Objekts, ohne das Objekt zu überschreiben.
function clobber(param) {
// Overwrite the parameter; this will not be seen in the calling code
param = new Object();
param.message = "This will not work.";
}
function update(param) {
// Modify the property of the object; this will be seen in the calling code.
param.message = "I was changed.";
}
// Create an object, and give it a property.
var obj = new Object();
obj.message = "This is the original.";
// Call clobber, and print obj.message.
clobber(obj);
print(obj.message);
// Call update, and print obj.message.
update(obj);
print(obj.message);
Ausgabe dieses Codes:
This is the original.
I was changed.
Datenvergleich
In JScript werden Daten entweder als Wert oder anhand eines Verweises verglichen. Wenn JScript eine Wertprüfung durchführt, werden zwei unterschiedliche Elemente miteinander verglichen, um festzustellen, ob sie gleich sind. In der Regel wird dieser Vergleich byteweise durchgeführt. Wird ein Vergleich anhand eines Verweises durchgeführt, wird überprüft, ob zwei unterschiedliche Elemente auf das gleiche Element verweisen. Ist dies der Fall, sind die Elemente gleich. Andernfalls sind sie nicht gleich, selbst wenn sie die gleichen Werte enthalten.
Zeichenfolgen können als Wert oder als Verweis miteinander verglichen werden, je nachdem, ob sie Objekte sind oder nicht. Wenn beide Zeichenfolgen String-Objekte sind, werden die Zeichenfolgen als Verweis miteinander verglichen. Andernfalls werden sie als Wert miteinander verglichen. Dadurch gelten zwei Zeichenfolgen als gleich, wenn jede Zeichenfolge getrennt von der anderen erstellt wurde, aber beide den gleichen Inhalt haben. Um die Werte von zwei String-Objekten miteinander zu vergleichen, konvertieren Sie die Objekte zuerst mit der toString- oder der valueOf-Methode in Zeichenfolgen, die keine Objekte sind, und vergleichen die daraus resultierenden Zeichenfolgen dann miteinander. Weitere Informationen finden Sie unter JScript-Zuweisungen und Gleichheit.
Siehe auch
Konzepte
JScript-Zuweisungen und Gleichheit