7.3 Typumwandlung
Siehe auch Typisierung auf Seite 192
Um den Typ einer Variablen brauchen Sie sich in ActionScript in der Regel nicht zu kümmern, da Flash diesen automatisch bestimmt und in Berechnungen gegebenenfalls umwandelt (implizite Typkonvertierung). Meistens funktioniert das auch zufrieden stellend – leider nicht immer. Aus diesem Grund sollten Sie das Ergebnis einer Berechnung nicht dem Zufall überlassen und eine explizite Typkonvertierungen durchführen – falls das nötig ist.
Besonders häufig treten Probleme bei arithmetischen Operationen mit Zeichenketten und Zahlen auf. Denn man übersieht schnell, dass eine als Zeichenkette gespeicherte Zahl in einer Variablen kein Wert vom Typ Zahl ist. Die folgenden Anweisungen erzeugen dieselbe Ausgabe, obwohl sie von unterschiedlichem Typ sind:
zahl1 = "1.5";
zahl2 = 1.5;
trace(zahl1);
trace(zahl2);
Ein Blick auf die Variablen innerhalb des Testmodus (Steuerung • Film testen und dann Fehlersuche • Variablen auflisten) offenbart dann aber doch, dass einmal eine Zeichenkette verwendet wird und einmal der Datentyp Zahl. Falls Sie nun diesen Unterschied nicht beachten, dann geht das bei den meisten Operationen trotzdem gut, da Flash eine automatische Typkonvertierung durchführt:
zahl1 = "1.5";
zahl2 = 1.5;
trace(zahl1-zahl2); // Ergibt 0
trace(zahl1*zahl2); // Ergibt 2.25
trace(zahl1/zahl2); // Ergibt 1
Die Anweisung trace(zahl1+zahl2); ergibt jedoch "1.51.5", da ActionScript den Additionsoperator »+« zum Aneinanderfügen von Zeichenketten verwendet, sobald einer der beteiligten Operanden eine Zeichenkette ist. Um das zu verhindern, verwenden Sie eine der Umwandlungsfunktionen:
trace(zahl1+zahl2); // Ergibt fälschlicherweise "1.51.5"
trace(Number(zahl1)+zahl2); // Ergibt 3
Probleme mit »unpassenden« Typen verhindern
Die folgende Grundregel hilft, Probleme mit Zeichenketten (String) innerhalb von Berechnungen zu vermeiden: Konvertieren Sie alle von einer URL eingelesenen (z.B. loadVariables, loadVars-Objekt oder XML-Objekt) oder durch den Benutzer eingegebenen Daten (Textfelder) in den gewünschten Typ, bevor Sie diese in einer Berechnung verwenden. Denn bei diesen Werten handelt es sich immer um Zeichenketten.
Zur Typumwandlung steht eine ganze Reihe Funktionen zur Verfügung, die Sie der Tabelle »Typumwandlungsfunktionen« auf der nächsten Seite entnehmen.
Tabelle 7.9
Typumwandlungsfunktionen
Funktion
|
Datentyp
|
Egebnis
|
parsteInt
|
Zeichenkette (string)
|
Ganzzahl (number)
|
parseFloat
|
Zeichenkette (string)
|
Gleitkommazahl (number)
|
Boolean
|
beliebig
|
Wahrheitswert (boolean)
|
Number
|
beliebig
|
Zahl (number)
|
String
|
beliebig
|
Zeichenkette (string)
|
Array
|
beliebig
|
Liste (object)
|
Object
|
beliebig
|
Objekt (object), je nach Parameter von der Klasse, Boolean, Object, String oder Number (siehe Seite 191).
|
Viele Funktionen und Operatoren erwarten Parameter bzw. Operanden eines speziellen Datentyps. In diesen Fällen konvertiert ActionScript die gegebenen Daten automatisch in das gewünschte Format. Die Regeln entnehmen Sie bitte den folgenden Tabellen.
Tabelle 7.10
Datentyp in einen Wahrheitswert (boolean) umwandeln
Eingabetyp
|
Ergebnis
|
Bemerkung
|
Undefined
|
false
|
|
Null
|
false
|
|
Boolean
|
Eingabewert (keine Umwandlung)
|
|
Number
|
Das Ergebnis ist false, falls der Wert 0 oder NaN ist. Sonst ist das Ergebnis true.
|
|
String
|
Das Ergebnis is false, falls der Wert eine leere Zeichenkette mit der Länge 0 ist. Sonst ist das Ergebnis true.
|
|
Object
|
true
|
|
Tabelle 7.11
Datentyp in eine Zahl (Number) umwandeln
Eingabetyp
|
Ergebnis
|
Bemerkung
|
Undefined
|
NaN
|
Bis inkl. Flash 6 ist das Ergebnis 0.
|
Null
|
NaN
|
Bis inkl. Flash 6 ist das Ergebnis 0.
|
Boolean
|
Das Ergebnis ist 0, falls der Wert false ist. Sonst ist das Ergbnis 1.
|
|
Number
|
Eingabewert (keine Umwandlung)
|
|
String
|
Soweit möglich konvertiert ActionScript die Zeichenkette in eine Zahl.
|
Siehe auch parseFloat (Seite 187)
|
Object
|
Soweit möglich konvertiert ActionScript das Objekt in einen primitiven Datentyp und diesen dann in eine Zahl.
|
|
Tabelle 7.12
Datentyp in eine Zeichenkette (String) umwandeln
Eingabetyp
|
Ergebnis
|
Bemerkung
|
Undefined
|
"undefined"
|
Aus Kompatibilitätsgründen mit älteren Flash-Versionen unterscheidet sich dieses Ergebnis vor Flash 7 von der ECMAScript-Spezifikation und gibt eine leere Zeichenkette "" zurück.
|
Null
|
"null"
|
|
Boolean
|
Das Ergebnis ist "false", falls der Wert false ist. Sonst ist das Ergbnis "true".
|
|
Number
|
ActionScript konvertiert die Zahl in eine Zeichenkette.
|
|
String
|
Eingabewert (keine Umwandlung)
|
|
Object
|
Soweit möglich konvertiert ActionScript das Objekt in einen primitiven Datentyp und diesen dann in eine Zeichenkette.
|
|
Tabelle 7.13
Datentyp in ein Objekt (Object) umwandeln
Eingabetyp
|
Ergebnis
|
Bemerkung
|
Undefined
|
leeres Objekt vom Typ object
|
ECMAScript generiert an dieser Stelle eine Fehlermeldung.
|
Null
|
leeres Objekt vom Typ object
|
ECMAScript generiert an dieser Stelle eine Fehlermeldung.
|
Boolean
|
Boolean-Objekt mit demselben Wert wie die Eingabe
|
|
Number
|
Number-Objekt mit demselben Wert wie die Eingabe
|
|
String
|
String-Objekt mit demselben Wert wie die Eingabe
|
|
Object
|
Eingabewert (keine Umwandlung)
|
|
7.3.1 parseInt
Die Funktion parseInt wandelt eine Zeichenkette in eine Ganzzahl (engl. Integer) um. Meist wird dies ähnlich wie die Funktion Number zur Typumwandlung eingesetzt. Im Gegensatz zu dieser Funktion ist aber auch die Angabe einer Basis möglich, was beispielsweise die Eingabe von Binärzahlen erlaubt.
|
Bemerkung: |
|
Diese Funktion steht seit dem Flash Player 4 zur Verfügung. Alternativ kann die Funktion Number eingesetzt werden. |
|
|
|
Syntax: |
parseInt(zeichenkette);
parseInt(zeichenkette, basis);
|
Parameter: |
|
Der erste Parameter gibt die Zeichenkette an, die in eine Zahl umgewandelt werden soll (andere Datentypen werden automatisch in eine Zeichenkette konvertiert). Führende Leerzeichen werden automatisch entfernt. Der optionale zweite Parameter legt die Basis zwischen 2 und 36 fest. Fehlt dieser Parameter, dann wird entweder eine Dezimalzahl (Basis 10), eine mit 0 beginnende Oktalzahl (Basis 8) oder eine mit 0x beginnende Hexadezimalzahl erwartet (Basis 16). |
|
|
|
Ergebnis: |
|
Diese Funktion gibt eine Ganzzahl vom Typ number zurück. Sollte sich die Zeichenkette nicht in eine Zahl umwandeln lassen, ist das Ergebnis NaN. |
|
|
|
Die Umwandlung der Zeichenkette in eine Zahl gestaltet sich umgangssprachlich in der Form, dass ActionScript alle führenden Leerzeichen und alle Zeichen ab dem ersten nicht erlaubten Zeichen entfernt und den Rest in eine Ganzzahl konvertiert. Erlaubt sind abhängig von der gewählten Basis die Zeichen 0 bis 9 und a bis z. Bei einer Basis 2 sind davon nur die Zeichen 0 und 1 zulässig, bei der Basis 16 die Zeichen 0 bis 9 und a bis f, wobei a 10 und f 15 entsprechen. Die Basis 36 erfordert alle Zeichen, wobei die 0 der Zahl 0 und z der Zahl 35 entsprechen. |
|
|
|
Beispiel: |
trace(parseInt("123"));
// Ausgabe: 123
trace(parseInt("-123"));
// Ausgabe: -123
trace(parseInt("123e5"));
// Ausgabe: 123
trace(parseInt("123.5"));
// Ausgabe: 123
trace(parseInt("011"));
// Ausgabe: 9 (Oktal 11)
trace(parseInt("0x1f"));
// Ausgabe: 31 (Hexadezimal 1f)
trace(parseInt("101",2));
// Ausgabe: 5 (Binär 101)
Angabe von Binärzahlen
Sollten Sie einmal Zahlen zu anderen Basen angeben wollen, dann hilft die Funktion parseInt dabei. Insbesondere für Binärzahlen ist das nützlich: meineZahl = parseInt("10101111", 2);
7.3.2 parseFloat
Die Funktion parseFloat wandelt eine Zeichenkette in eine Gleitkommazahl (engl. Float) um. Meist wird dies ähnlich wie die Funktion Number zur Typumwandlung eingesetzt.
|
Bemerkung: |
|
Diese Funktion steht seit dem Flash Player 4 zur Verfügung. Alternativ kann die Funktion Number eingesetzt werden. |
|
|
|
Syntax: |
parseFloat(zeichenkette);
|
Parameter: |
|
Der Parameter gibt die Zeichenkette an, die in eine Zahl umgewandelt werden soll (andere Datentypen werden automatisch in eine Zeichenkette konvertiert). Führende Leerzeichen werden automatisch entfernt. |
|
|
|
Ergebnis: |
|
Diese Funktion gibt eine Gleitkommazahl vom Typ number zurück. Sollte sich die Zeichenkette nicht in eine Zahl umwandeln lassen, ist das Ergebnis NaN. |
|
|
|
Die Umwandlung der Zeichenkette in eine Zahl gestaltet sich umgangssprachlich in der Form, dass ActionScript alle führenden Leerzeichen und alle Zeichen ab dem ersten nicht erlaubten Zeichen entfernt und den Rest in eine Gleitkommazahl konvertiert. Erlaubt sind alle Zeichen, die auch sonst zur Angabe einer Gleitkommazahl verwendet werden dürfen, inklusive Punkt und dem e für Zehnerpotenzen. |
|
|
|
Beispiel: |
trace(parseFloat("123"));
// Ausgabe: 123
trace(parseFloat("-123"));
// Ausgabe: -123
trace(parseFloat("123e5"));
// Ausgabe: 12300000
trace(parseFloat("123.5"));
// Ausgabe: 123.5
trace(parseFloat("011"));
// Ausgabe: 11
trace(parseFloat("0x1f"));
// Ausgabe: 0
trace(parseFloat("unsinn"));
// Ausgabe: NaN
7.3.3 Boolean (Funktion)
Die Funktion Boolean wandelt einen beliebigen Ausdruck in einen Wahrheitswert (boolean) um. Die Funktion wird ähnlich wie der gleichnamige Konstruktor eingesetzt.
|
Bemerkung: |
|
Diese Funktion steht seit dem Flash Player 5 zur Verfügung. |
|
|
|
Syntax: |
Boolean(ausdruck);
|
Parameter: |
|
Der Parameter gibt den Wert als Ausdruck an, der in einen Wahrheitswert (boolean) umgewandelt werden soll. |
|
|
|
Ergebnis: |
|
Diese Funktion gibt einen primitiven Datentyp vom Typ boolean zurück. |
|
|
|
|
E undefined wird zu false. |
|
|
E null wird zu false. |
|
|
E Boolesche Werte werden nicht umgewandelt. |
|
|
E Zahlen werden zu false, falls der Wert 0 oder NaN ist. Sonst ist das Ergebnis true. |
|
|
E Zeichenketten werden zu false, falls der Wert eine leere Zeichenkette mit der Länge 0 ist. Sonst ist das Ergebnis true. |
|
|
E Objekte werden zu true. |
|
Der gleichnamige Konstruktor erzeugt eine Instanz des Boolean-Objektes und keinen primitiven Datentyp (referenzdatentyp = new Boolean
(ausdruck);). |
|
|
|
Beispiel: |
ausdruck = 1;
// Boolean (Funktion)
standarddatentyp = Boolean (ausdruck);
trace(standarddatentyp);
trace(typeof standarddatentyp);
// Boolean (Konstruktor)
referenzdatentyp = new Boolean(ausdruck);
trace(referenzdatentyp);
trace(typeof referenzdatentyp);
7.3.4 Number (Funktion)
Siehe OOP
Die Funktion Number wandelt einen beliebigen Ausdruck in eine Zahl (Number) um. Die Funktion wird ähnlich wie der gleichnamige Konstruktor eingesetzt.
|
Bemerkung: |
|
Diese Funktion steht seit dem Flash Player 5 zur Verfügung. |
|
|
|
Syntax: |
Number(ausdruck);
|
Parameter: |
|
Der Parameter gibt den Wert als Ausdruck an, der in eine Zahl (Number) umgewandelt werden soll. |
|
|
|
Ergebnis: |
Diese Funktion gibt einen primitiven Datentyp vom Typ number zurück.
undefined wird vor Flash 7 zu 0 und ab Flash 7 zu NaN.
null wird vor Flash 7 zu 0 und ab Flash 7 zu NaN.
Boolesche Werte werden zu 0, falls der Wert false ist. Sonst ist das Ergebnis 1.
Zahlen werden nicht umgewandelt.
Soweit möglich konvertiert ActionScript die Zeichenkette in eine Zahl.
Soweit möglich konvertiert ActionScript das Objekt in einen primitiven Datentyp und diesen dann in eine Zahl.
|
Der gleichnamige Konstruktor erzeugt eine Instanz des Number-Objektes und keinen primitiven Datentyp (referenzdatentyp = new Number
(ausdruck);). |
|
|
|
Beispiel: |
ausdruck = "-10.5e-3"; // entspricht -0.0105
// Number (Funktion)
standarddatentyp = Number (ausdruck);
trace(standarddatentyp);
trace(typeof standarddatentyp);
// Number (Konstruktor)
referenzdatentyp = new Number(ausdruck);
trace(referenzdatentyp);
trace(typeof referenzdatentyp);
7.3.5 String (Funktion)
Siehe OOP
Die Funktion String wandelt einen beliebigen Ausdruck in eine Zeichenkette (String) um. Die Funktion wird ähnlich wie der gleichnamige Konstruktor eingesetzt.
|
Bemerkung: |
|
Diese Funktion steht seit dem Flash Player 5 zur Verfügung. |
|
|
|
Syntax: |
String(ausdruck);
|
Parameter: |
|
Der Parameter gibt den Wert als Ausdruck an, der in eine Zeichenkette (String) umgewandelt werden soll. |
|
|
|
Ergebnis: |
|
Diese Funktion gibt einen primitiven Datentyp vom Typ string zurück. |
|
|
undefined wird bis Flash 6 zu einer leeren Zeichenkette "" (aus Kompatibilitätsgründen mit älteren Flash-Versionen unterscheidet sich dieses Ergebnis von der ECMAScript-Spezifikation, die "undefined" zurückgibt), Flash 7 gibt wie ECMAScript "undefined" zurück.
null wird zu "null".
Boolesche Werte werden zu "false", falls der Wert false ist. Sonst ist das Ergebnis "true".
Zahlen werden in eine Zeichenkette umgewandelt.
Zeichenketten werden nicht umgewandelt.
Soweit möglich konvertiert ActionScript das Objekt in einen primitiven Datentyp und diesen dann in eine Zeichenkette.
|
Der gleichnamige Konstruktor erzeugt eine Instanz des String-Objektes und keinen primitiven Datentyp (referenzdatentyp = new String(ausdruck);). |
|
|
|
Beispiel: |
ausdruck = -0.0105;
// String (Funktion)
standarddatentyp = String(ausdruck);
trace(standarddatentyp);
trace(typeof standarddatentyp);
// String (Konstruktor)
referenzdatentyp = new String(ausdruck);
trace(referenzdatentyp);
trace(typeof referenzdatentyp);
7.3.6 Array (Funktion)
Siehe OOP
Die Funktion Array wandelt eine Folge beliebiger Ausdrücke in eine Liste (Instanz des Array-Objektes) um.
|
Bemerkung: |
|
Diese Funktion steht seit dem Flash Player 5 zur Verfügung. |
|
|
|
Syntax: |
Array(ausdruck1,ausdruck2 ...);
|
Parameter: |
|
Als Parameter geben Sie beliebig viele durch Kommata getrennte Ausdrücke an, die in eine Liste (Array) umgewandelt werden sollen. |
|
|
|
Ergebnis: |
|
Diese Funktion gibt als komplexen Datentyp eine Liste (Array) zurück. |
|
|
|
Der gleichnamige Konstruktor verhält sich wie die Funktion (referenzdatentyp = new Array(ausdruck1,ausdruck2 ...);) oder die Zugriffsoperatoren [ und ]. |
|
|
|
Beispiel: |
// Array
liste1 = Array("Marc", "Saban", "Sascha");
liste2 = new Array("Marc", "Saban", "Sascha");
liste3 = ["Marc", "Saban", "Sascha"];
7.3.7 Object (Funktion)
Siehe OOP
Die Funktion Object wandelt einen beliebigen Ausdruck in ein Objekt (Object) um.
|
Bemerkung: |
|
Diese Funktion steht seit dem Flash Player 5 zur Verfügung. |
|
|
|
Syntax: |
Object(ausdruck);
|
Parameter: |
|
Der Parameter gibt den Wert als Ausdruck an, der in ein Objekt (Object) umgewandelt werden soll. |
|
|
|
Ergebnis: |
|
Diese Funktion gibt einen komplexen Datentyp in der folgenden Form zurück: |
|
|
undefined wird zu einer leeren neuen Instanz des Object-Objektes.
null zu einer leeren neuen Instanz des Object-Objektes.
Boolesche Werte werden zu einer Instanz des Boolean-Objektes mit demselben Wert wie der Parameter.
Zahlen werden zu einer Instanz des Number-Objektes mit demselben Wert wie der Paramter.
Zeichenketten werden zu einer Instanz des String-Objektes mit demselben Wert wie der Parameter.
|
Objekte werden nicht umgewandelt. |
|
Der gleichnamige Konstruktor verhält sich wie die Funktion (referenzdatentyp = new Object(ausdruck);). |
|
|
|
Beispiel: |
ausdruck = -0.0105;
// Object (Funktion)
referenzdatentyp = Object(ausdruck);
trace(referenzdatentyp);
trace(typeof referenzdatentyp);
|