A. Schreiber
---------------------------------------------------
ÜBERSICHT ZU EINIGEN SPRACHELEMENTEN VON JAVASCRIPT
---------------------------------------------------
Stand: 2007-03-15
I.Boolesche Vergleichsoperatoren
================================
Gleich ==
Ungleich !=
Größer >
Größergleich >=
Kleiner <
Kleinergleich <=
-------------------------------
Schreibweise (infix): a >= b
Wert (Typ boolean): true , false
Auswertungskriterium:
bei Zahlen die natürliche Ordnung
bei Strings die lexikografische Ordnung
II. Logik-Operatoren
====================
UND &&
ODER ||
NICHT !
-------------------------------
Schreibweise:
&& und || infix: op1 && op2,
op1 || op2
! präfix: !op
Wert (Typ boolean): true , false
Auswertungskriterien: Gesetze der Aussagenlogik
a && b true gdw a true und b true
a || b false gdw a false und b false
!a true gdw a false
III. if-else: Bedingte Ausführung von Anweisungen
=================================================
Syntax (if-Anweisung):
if (Bedingung)
{
Anweisungen
}
WICHTIG:
Die Bedingung bei if MUSS in runden Klammern stehen!
---------------------------------------------
Syntax (if-else-Anweisung):
if (Bedingung)
{
Anweisungen 1
}
else
{
Anweisungen 2
}
IV. Fallunterscheidung mittels switch-case
==========================================
Syntax:
switch(arg)
{
case wert1:
Anweisung 1
break;
case wert2:
Anweisung 2
break;
...
default:
Anweisung im Sonst-Fall
break;
}
V. Das INPUT-Tag und einige (wichtige) Attribute
================================================
: kein Abschluss-Tag!
:
TYPE = "button"
TYPE = "reset"
NAME = "---" frei wählbarer Name
SIZE = "---" angezeigte Zeichenzahl
MAXLENGTH = "---" max. Zeichenzahl im Eingabefeld
VALUE = "---" Textvorbelegung bzw. Beschriftung
READONLY bewirkt im Eingabefeld "nur lesen"
Beispiel für den Zugriff auf eine Eingabe (TYPE="text", NAME="PLZfeld") innerhalb
eines Formulars (NAME="Adressenformular"):
document.Adressenformular.PLZfeld.value
VI. Dynamische Ablaufsteuerung
==============================
for-Schleife
------------
Eine for-Schleife wiederholt einen Anweisungsblock. Die Anzahl der wiederholten
Durchläufe wird dabei durch eine Abbruch-Bedingung festgelegt.
SYNTAX:
for ( initialausdruck; bedingung; änderung)
{
anweisungsfolge
}
Die Änderungsvorschrift [änderung] wird grundsätzlich NACH einem Schleifendurchlauf
ausgeführt.
Die Abbruchbedingung [bedingung] ist ein beliebiger boolescher Ausdruck und wird
NACH jeder Ausführung der Änderungsvorschrift überprüft. Sie wird aber auch
VOR dem Ersteintritt in die Schleife überprüft, d.h. bei unerfüllter [bedingung]
wird die Schleife übersprungen.
BEISPIEL:
sum = 0;
for ( var i=1; i<=10; i++ )
{
sum = sum + i
}
Bemerkungen zum Beispiel:
In sum steht nach Austritt aus der Schleife die Summe der Zahlen 1 bis 10.
Die Änderungsanweisung i++ bewirkt dasselbe wie i = i+1 (erhöht die
Laufvariable i somit um den Wert 1).
Die Laufvariable i ist auch außerhalb des Schleifenrumpfs bekannt.
Unmittelbar nach Austritt aus der Schleife hat i den Wert 11
(da i zunächst erhöht und danach die Abbruchbedingung i<=10 überprüft wurde).
while-Schleife
--------------
Aufbau und Arbeitsprinzip der while-Schleife sind einfacher zu verstehen als bei
der for-Schleife. Die Anweisungsfolge wird solange wiederholt durchlaufen, wie die
Eintrittsbedingung erfüllt ist (d.h. den booleschen Wert true besitzt).
SYNTAX:
while ( bedingung )
{
anweisungsfolge
}
Die hier genannte Bedingung ist eine Eintrittbedingung; sie wird VOR Eintritt in die
Schleife überprüft. Ist sie nicht erfüllt, so wird die Anweisungsfolge erst gar nicht
ausgeführt ("abweisende Schleife").
Grundsätzlich lassen sich alle Arten von Schleifen als while-Schleifen konstruieren.
So lässt sich etwa das zur for-Schleife gegebene Beispiel folgendermaßen formulieren:
BEISPIEL:
sum = 0;
i = 1;
while ( i<=10 )
{
sum = sum + i;
i = i + 1;
}
Der Schleifenzähler i muss vor der Schleife initialisiert werden.
Abbruch einer Schleife (for und while)
--------------------------------------
1. Unter Umständen will man eine Schleife verlassen (d.h. mit der ersten Anweisung
fortfahren, die der Schleife folgt), wenn eine bestimmte Bedingung eintritt
(welche innerhalb des Schleifenkörpers abgefragt wird). Die geschieht durch die
Anweisung
break
2. Will man lediglich den aktuellen Durchlauf der Schleife abbrechen und die
Bearbeitung des Programms mit dem nächsten Schleifendurchlauf fortsetzen, so
geschieht dies durch die Anweisung
continue
Auf Beispiele wird hier verzichtet (man kann sie sich leicht selbst zurechtlegen).
In den meisten Fällen lässt sich der Gebrauch von break und continue vermeiden.
VII. Das Objekt string
======================
String ist (anders als das Objekt Math) ein "allgemeines" Objekt, von dem einzelne
Kopien mit Hilfe der Funktion String( ) erzeugt werden.
1. Direkte Wertzuweisung (definiert eine String-Variable)
var text1 = "Hallo";
2. Verwendung eines sog. Konstruktors (erzeugt ein String-Objekt)
var text2 = new String("Hallo");
Die Alternative 2 ist ratsam, wenn auf Zeichenketten aus verschiedenen
window-Instanzen zugegriffen werden soll.
Es besteht die Möglichkeit der Typkonversion: text2.toString() ist typgleich text1.
Eigenschaften
-------------
length Anzahl der Zeichen des Strings
Methoden (Auswahl)
------------------
Erscheinungsweise:
big() groß darstellen
small() klein darstellen
sub() tiefstellen
sup() hochstellen
bold() fett darstellen
italics() kursiv darstellen
fixed() in Schreibmaschinenschrift darstellen
toLowerCase() alle Zeichen kleinschreiben
toUpperCase() alle Zeichen großschreiben
fontcolor() Schriftfarbe erzeugen
fontsize() Schriftgröße erzeugen
Struktur/Operationen:
charAt() Zeichen an Position ermitteln
indexOf() Position eines Zeichens ermitteln
lastIndexOf() letzte Position eines Zeichens ermitteln
concat() Strings zusammenfügen (verketten)
slice() Teil aus String extrahieren
substr() Teilstring ab Position ermitteln
substring() Teilstring ermitteln
split() String in Teilstrings zerlegen
(wird bei Arrays behandelt)
VIII. Das Objekt Array
======================
Ein Array (bzw. Feld) ist vergleichbar einer Folge, einem Vektor (oder Tupel)
im mathematischen Sinn. Es enthält eine Folge von Daten (Elementen).
Arrays werden über einen Konstruktor erzeugt, z.B.
var Namenliste = new Array("Bodo","Lisa","Paul");
Das Element Namenliste[0] enthält "Bodo".
Das Element Namenliste[1] enthält "Lisa".
Das Element Namenliste[2] enthält "Paul".
Ein Array kann beliebige Daten aufnehmen. Die Elemente dürfen ihrerseits auch
wieder Arrays sein.
Erzeugungsvarianten:
--------------------
Namenliste = new Array(3);
Namenliste[0] = "Bodo";
Namenliste[1] = "Lisa";
Namenliste[2] = "Paul";
Man kann es gänzlich vermeiden, die Anzahl der Elemente im Voraus festzulegen:
Namenliste = new Array();
Namenliste[0] = "Bodo";
usw.
Weitere Elemente können nach Beliebigen hinzugefügt werden.
Eigenschaften:
--------------
length Anzahl der Elemente
Methoden:
---------
concat() Arrays verketten
reverse() Elementreihenfolge umkehren
sort() Array sortieren
pop() letztes Element löschen
push() neue Elemente anhängen
shift() erstes Element entfernen
slice() Teil-Array extrahieren
join() in eine Zeichenkette umwandeln
IX. Array als Datensatz und mehrdimensionale Arrays
===================================================
Beispiel:
student = new Array();
student[0] = "Meier"; // Nachname
student[1] = "Peter"; // Vorname
student[2] = "m"; // Geschlecht
student[3] = "Physik";// Studienfach
student[4] = 1980; // Geburtsjahr
student[5] = 3; // Semester
Will man die Daten zu mehreren Studenten darstellen (abspeichern), so benötigt man
dazu einen Array, dessen Elemente Arrays vom Typ "student" (s.o.) sind,
sog. mehrdimensionale Arrays:
Beispiel:
studatei = new Array();
studatei[0] = new Array();
studatei[0][0] = "Meier";
studatei[0][1] = "Peter";
studatei[0][2] = "m";
studatei[0][3] = "Physik";
studatei[0][4] = 1980;
studatei[0][5] = 3;
studatei[1] = new Array();
studatei[1][0] = ... usw.
X. Funktionen
=============
a) Aufbau einer Funktion (in JS)
--------------------------------
SYNTAX:
function fktname( [p_1] [,p_2] [... p_N] )
{
anweisungen
}
Bemerkungen:
1. function ist ein in JS reserviertes Wort; ihm folgt der Funktionsname mit
angehängtem Klammerpaar (). Groß/Kleinschreibung wird unterschieden (und ist daher
zu beachten).
2. Innerhalb der Klammern können (müssen aber nicht) eine oder mehrere Variablen
stehen, sog. Parameter (durch Komma getrennt).
3. Der nachfolgende Block (sog. Rumpf oder Funktionskörper) { ... } enthält die
Anweisungen, welche abgearbeitet werden, wenn die Funktion aufgerufen wird. Ein
Funktionsaufruf erfolgt durch die Anweisung: fktname(...);
4. Soll die Funktion einen Wert [ergebnis] zurückgeben (an das aufrufende Programm),
so geschieht dies innerhalb ihres Rumpfes durch die Anweisung:
return ergebnis
5. Funktionen sind nicht schachtelbar, d.h. im Rumpf einer Funktion können keine
weiteren (Unter-)Funktionen definiert werden.
b) Lokale und globale Variable
------------------------------
Eine Variable, die außerhalb einer Funktion deklariert wurde, ist "überall" bekannt
(global gültig); insbesondere kann ihr innerhalb und außerhalb des Funktionsrumpfes
ein Wert zugewiesen werden.
BEISPIEL:
var a = 5;
...
function Dummy(x)
// Tut nichts! Oder doch?
{
a = x;
return a
}
In diesem Fall wird a durch den in Dummy zugewiesenen Wert überschrieben
(sog. Seiteneffekt).
Wird eine Variable innerhalb einer Funktion deklariert, so ist sie auch nur innerhalb
des Rumpfs dieser Funktion gültig (und außerhalb unbekannt): sog. lokale Variable.
In diesem Fall MUSS 'var' vor die Variable geschrieben werden.
BEISPIEL:
var a = 5;
function Dummy2(x)
// Tut wirklich nichts!
{
var a = x;
return a
}
Die Variable a innerhalb von Dummy2 ist außerhalb des Rumpfs nicht gültig.
Nichtsdestoweniger ist eine (andere) Variable a global definiert und hat den Wert 5.
Es entsteht somit nicht einmal ein Namenskonflikt zwischen gleichbenannten globalen
und lokalen Variablen!
c) Parameterübergabe
--------------------
1. "call by value"
Wird eine Variable x einer Funktion als Parameter übergeben, so wird nur ihr Wert
übernommen ("call by value"). Die Funktion legt eine Kopie der Variablen an.
Änderung des Parameters im Funktionsrumpf hat keine Auswirkung auf die Variable x.
BEISPIEL:
var x = 7;
function vorgaenger(m)
{
m = m-1;
return m
}
y = vorgaenger(x)
In y steht nun der Wert 6. Die Variable x hat ihren ursprünglichen Wert 7 behalten.
2. "call by reference"
Wird ein Objekt als Parameter übergeben, so übernimmt die Funktion NICHT den Wert,
sondern lediglich eine Referenz auf das Objekt ("call by reference").
Die Funktion arbeitet dann mit dem Original (anstatt mit einer Kopie).
Das hat eine erhebliche Konsequenz:
------------------------------------------------
ÄNDERUNGEN INNERHALB DER FUNKTION WIRKEN SICH
AUCH AUF DAS OBJEKT AUSSERHALB DER FUNKTION AUS!
------------------------------------------------
BEISPIEL:
var x = new Array(1,2,3);
function verdoppeln(a)
{
a[0] = 2*a[0];
a[1] = 2*a[1];
a[2] = 2*a[2];
}
verdoppeln(x);
Nun ist x gleich dem Array mit den Elementen 2,4,6.
Bemerkung:
Werden Objekte auf diese Weise verändert, so ist eine Rückgabe (mittels return)
nicht erforderlich.
------------------------------------------------------
ENDE DER ÜBERSICHT
------------------------------------------------------