JavaScript

Knowledge Base

JavaScript / ECMAScript

Datentyp String

Beim String-Datentyp repräsentiert (wie auch in anderen Programmiersprachen) textuelle Daten / Zeichenketten.

Hinweis: Es gibt in JavaScript den primitiven Datentyp String (Zeichenkette) aber auch einen speziellen Object-Wrapper String, der verwendet wird, um den primitiven String um Objektmethoden zu erweitern. Das geschieht i. d. R. transparent (und vermutlich aus Performance-Gründen auch nur "virtuell"), d. h. wenn z. B. auf die Eigenschaft ".length" (zur Ermittlung der String-Länge) verwendet wird, wird der String intern mit einem String-Objekt gewrappt, um dann die Länge zu ermitteln (und zurückzugegeben).

Primitiver Datentyp String:

Gemäß ECMAScript handelt sich bei einem String(-Wert) um eine Sequenz von 16-bit vorzeichenlosen Ganzzahlen. Jede dieser Zahlen im String nimmt eine Position ein. Das erste Element befindet sich an der Position mit dem Index 0, das nächste beim Index 1 und so weiter. Die letzte Position ist damit Länge des Strings minus 1.

Das hört sich komplizierter an als es ist. Der ECMAScript-Standard gibt nur eine grundsätzlich technische Implementierung vor (16 Bits = 2 Bytes) - in der Regel wird bei Implementierung von Strings in JavaScript (z. B. in Browsern) die Zeichenkodierung UTF-16 (Unicode / https://de.wikipedia.org/wiki/UTF-16) verwendet. Strings in JavaScript sollten also vgl. unproblematisch beim länderübergreifenden Einsatz sein.

Nach ECMAScript ist ein String-Wert alle möglichen Zeichenketten (Ketten von 16-bit vorzeichenlosen Ganzzahlen). Es wird keine Begrenzung definiert (z. B. auf maximal 2GB Zeichenketten oder ähnliches). Die Begrenzung also letztendlich von der Implementierung (z. B. im Browser) vorgegeben. Allerdings habe ich keine entsprechenden  Hinweise bzgl. String-Limitierung (z. B. bei Firefox oder Chrome) gefunden.

Ein String gilt als unveränderlich - d. h. bei Änderungen (z. B. Verkettung zweier Strings) wird nicht der alte String verändert, sondern ein neuer (unveränderlicher) String erzeugt.

String-Erstellung:

Ein String in JavaScript wird mittels einem String-Literal erzeugt - entweder mit einfachen oder doppelten Anführungsstrichen:

var a = 'Text';
 
var a = "Text";

Ob nun einfache oder doppelte Anführungsstriche verwendet werden, hängt oft von den persönlichen Vorlieben des Entwicklers (oder des Auftraggebers ;-)) ab. Auch eine gemischte Verwendung ist möglich - z. B. auch im Falle wenn die Anführungsstriche im Text verwendet werden sollen:

var a = 'Sein Name "Peter" war mir unbekannt.';
var a = "Sein Name 'Peter' war mir unbekannt.";

Das vermeidet etwaige Escape-Zeichen im Text.

Escape-Zeichen:

Steuerzeichen oder Anführungszeichen innerhalb des Texts können auch mit einem Escape-Zeichen eingefügt werden. In JavaScript ist das der Backslash \ - z. B. folgende

  • \" oder \': Doppelte od einfache Anführungszeichen im Text
  • \\: Der Backslash selbst

Es gibt zahlreiche Steuerzeichen, wie z. B. \b (Backspace), \n (New line), \r (Carriage Return), \t (Tab) - aber es sollte vor dem Einsatz geprüft werden, ob diese vom jeweiligen Browser (oder allgemeiner der JavaScript-Hostumgebung) unterstützt werden. Z. B. bei der Ausgabe auf dem Bildschirm mit document.writeln wird ein \b (Backspace) vermutlich nicht dazu führen, dass ein Zeichen gelöscht wird oder ein \n führt in einem HTML-Dokument nicht zu einem Zeilenumbruch (weil diese textuellen Steuerzeichen als "white space" ignoriert werden und nur HTML zur Steuerung der Ausgabe verwendet wird).

Operatoren:

Neben dem Verkettungsoperator (+) erlaubt dieser Datentyp auch Vergleiche (==, ===, <, <=, >, >=) - für den alphanumerischen Vergleich.

Einzelne Zeichen:

Es gibt keinen Datentyp char in JavaScript. Aber auf einzelne Zeichen kann mit der charAt oder seit ECMAScript 5 auch mit einer Array-ähnlichen Notation zugegriffen werden - das erste Zeichen steht beim Index 0 und wird außerhalb des strings zugegriffen, wird undefined als Wert zurückgegeben.

<script>
    a = "Test";
    document.writeln("a.charAt(2) = " + a.charAt(2) + "<br>");
    document.writeln("a[3] = " + a[3] + "<br>");
    document.writeln("a[10] = " + a[10] + "<br>");
</script>

Ausgabe:

a.charAt(2) = s
a[3] = t
a[10] = undefined