JavaScript/Bezeichner

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

An vielen Stellen in JavaScript müssen Sie selbst Namen vergeben, zum Beispiel für selbst definierte Funktionen, eigene Objekte oder Variablen. Diese werden Bezeichner genannt.

Bei selbst vergebenen Namen gelten folgende Regeln:

  • sie dürfen keine Leerzeichen enthalten
  • sie dürfen nur aus Buchstaben und Ziffern bestehen - das erste Zeichen muss ein Buchstabe sein; es sind Groß- und Kleinbuchstaben erlaubt. Groß- und Kleinschreibung werden unterschieden!
  • sie dürfen keine deutschen Umlaute oder scharfes S enthalten
  • sie dürfen als einziges Sonderzeichen den Unterstrich "_" enthalten
  • sie dürfen nicht mit einem reservierten Wort identisch sein.
Empfehlung: Vergeben Sie sprechende Variablennamen, die Ihnen auch ein halbes Jahr, nachdem Sie das Script geschrieben haben, noch signalisieren, welche Bedeutung sie haben.
Es dürfen ruhig auch deutschsprachige Wörter sein, solange die genannten Regeln eingehalten werden.

Reservierte Wörter

Es gibt eine Reihe von reservierten Wörtern (Reserved Words), die nicht als Name für einen Bezeichner verwendet werden dürfen. Andernfalls wird ein Syntaxfehler erzeugt, der die Ausführung des Programms verhindert. Es ist deshalb bei der Vergabe von Bezeichnern, etwa für Funktionen oder Variablen, stets darauf zu achten, dass es sich bei dem gewählten Namen nicht um ein reserviertes Wort handelt.


Beispiel
// Syntax Error

function break() {
  return null;
}


Wird wie bei der Funktionsdeklaration in dem Beispiel oben ein reserviertes Wort als Name für den Bezeichner gewählt, in diesem Fall also das Schlüsselwort break, dann wird das Programm erst gar nicht ausgeführt. Diese Funktion macht ihrem Namen also alle Ehre. Es sind allerdings in Bezug auf die reservierten Wörter einige Besonderheiten zu beachten, die nicht unbedingt sofort ersichtlich sind.


Beispiel
const object = {
  delete(property) {
    return delete this[property];
  }
};

object.default = 'value';

console.info(object.delete('default')); // true


So sind die Namen von Objekteigenschaften und Methoden (Property Names) zum Beispiel grundsätzlich keine Bezeichner im Sinne der Sprache, weshalb das Verbot der Verwendung reservierter Wörter hier nicht einschlägig ist. Dabei spielt es auch keine Rolle, ob eine Eigenschaft oder Methode in einem Objektliteral definiert wird oder nicht, weshalb in dem Beispiel oben durch die Verwendung der Schlüsselwörter delete und default als Eigenschafts- beziehungsweise Methodenname kein Fehler erzeugt wird.


Beispiel
let public = 'valid';


// Syntax Error

function test() {
  'use strict';
  const static = 'invalid';
}


Darüber hinaus ist zu beachten, dass manche Wörter nur im Strict Mode reserviert sind. So erzeugt etwa die Verwendung des Namens public als Bezeichner bei der Variablendeklaration in dem Beispiel oben keinen Fehler, da der globale Kontext im normalen Modus ausgeführt wird. Weil die Funktion test jedoch im Strict Mode ausgeführt werden soll und in ihr eine Konstante deklariert wird, deren Name in diesem Modus reserviert ist, wird hier dennoch ein Syntaxfehler erzeugt.


Beispiel
<script>
  let await = 'Godot';
</script>


Schließlich kann der Status als reserviertes Wort auch davon abhängen, ob der auszuführende Code Teil eines Scripts oder Teil eines Moduls ist. Wird etwa, wie in dem Beispiel oben, eine Variable innerhalb eines Scripts deklariert und dabei der Bezeichner await verwendet, dann ist das kein Problem. Jedoch würde es sich anders verhalten, wenn die Deklaration innerhalb eines Moduls vorgenommen worden wäre, denn dort wäre der Name await reserviert.

Schlüsselwörter

Bei den meisten reservierten Wörtern handelt es sich um Schlüsselwörter der Sprache (Keywords), also um Wörter, die eine bestimmte Bedeutung haben. So wie beispielsweise das Wort function, das zur Definition einer Funktion verwendet werden kann. Die folgende Tabelle zeigt alle reservierten Wörter, bei denen es sich um solche Schlüsselwörter handelt und die unabhängig vom Ausführungsmodus des Programms geschützt sind, also nicht als Name für Bezeichner verwendet werden dürfen.


Reserviertes Wort Erläuterung
as -Alias beim Export von Modulen, bzw. deren Inhalten
break Teil einer Abbruchanweisung. Wird verwendet in Schleifen und bei switch.
case Für Fallunterscheidungen mit switch.
catch Wird bei der Fehlerbehandlung mit try und catch verwendet.
class Für die Definition einer Klasse (ES6).
const Leitet die Deklaration einer oder mehrerer Konstanten ein.
continue Teil einer Fortsetzungsanweisung.
debugger Definiert einen Haltepunkt im Programm für Debugger.
default Standardklausel bei switch. Auch verwendet bei Standardexport in einem Modul.
delete Operator zum Löschen von Objekteigenschaften.
do Für Schleifen mit do und while.
else Teil einer bedingten Anweisung mit if.
export Wird bei der Deklaration eines Exports in einem Modul verwendet.
extends Mit dem Schlüsselwort extends kann eine abgeleitete Klasse definiert werden.
finally Kann bei der Fehlerbehandlung mit try und catch verwendet werden.
for Wird in verschiedenen Schleifen verwendet.
function Schlüsselwort zur Definition einer Funktion.
if Für bedingte Anweisungen.
import Wird verwendet bei der Deklaration eines Imports aus einem Modul.
in Operator in einem relationalen Ausdruck. Auch verwendet in einer Schleife mit for.
instanceof Hiermit kann geprüft werden, ob ein Objekt eine Instanz eines Konstruktors ist.
new Operator für den Konstruktorenaufruf.
return Teil der Rückgabeanweisung einer Funktion.
super Schlüsselwort zum Methoden- oder Konstruktorenaufruf in Objekt oder abgeleiteter Klasse.
switch Für Fallunterscheidungen.
this Eingebaute Kontextvariable von Funktionen.
throw Erzeugt eine benutzerdefinierte Ausnahme.
try Wird bei der Fehlerbehandlung mit try und catch verwendet.
typeof Operator, der den Datentyp des Operanden zurückgibt.
var Schlüsselwort für die Deklaration einer oder mehrerer Variablen.
void Wertet den Ausdruck auf der rechten Seite aus und gibt standardmäßig undefined zurück.
while Wird bei Schleifen verwendet.
with wurde früher verwendet, um mehrere Anweisungen mit einem Objekt durchzuführen.
yield Pausiert die Ausführung einer Generatorfunktion.


Darüber hinaus gibt es noch zwei Schlüsselwörter, die nur im Strict Mode reserviert sind, deren Verwendung also nur in diesem Ausführungsmodus einen Syntaxfehler produziert. Es ist allerdings davon abzuraten, diese Wörter als Name für einen Bezeichner zu verwenden, auch wenn dies im normalen Ausführungsmodus grundsätzlich möglich wäre, da hierbei die Lesbarkeit und damit auch die Wartbarkeit des Codes beeinträchtigt wird.


Reserviertes Wort Erläuterung
let Leitet die Deklaration einer oder mehrerer Variablen ein.
static Wird verwendet um innerhalb einer Klasse eine eigene Methode zu definieren.

Konstanten

Weiterhin gibt es in JavaScript einige eingebaute Konstanten (Literals), bei denen es sich ebenfalls um reservierte Wörter handelt und deren Gebrauch entsprechend eine Ausnahme produziert, nämlich die primitiven Werte vom Datentyp Boolean und Null. Bei dem primitiven Wert undefined handelt es sich hingegen nicht um ein reserviertes Wort, weder im normalen noch im strikten Ausführungsmodus. Allerdings ist auch hier von der Verwendung als Name für einen Bezeichner abzuraten.


Reserviertes Wort Erläuterung
null Repräsentiert die beabsichtigte Abwesenheit eines Wertes.
false Boolescher Wert, der für falsch steht.
true Boolescher Wert, der für wahr steht.

Für die Zukunft reservierte Wörter

Schließlich gibt es noch einige für die zukünftige Entwicklung der Sprache reservierte Wörter (Future Reserved Words), die ebenfalls nicht in Bezeichnernamen verwendet werden sollten. Aber auch hier sind einige Eigenheiten zu beachten. So erzeugt die Verwendung des für die Zukunft reservierten Wortes enum grundsätzlich einen Syntaxfehler, während das Wort await wie in der Einleitung bereits gesehen nur dann geschützt ist, wenn es im Code eines Moduls verwendet wird.


  • implements
  • interface
  • package
  • private
  • protected
  • public


Die oben aufgelisteten Wörter sind nur dann reserviert, wenn das Programm im Strict Mode ausgeführt wird. Jedoch gilt auch hier, dass von der Verwendung diese Wörter als Namen für Bezeichner von Variablen, Konstanten oder Funktionen abzuraten ist, selbst wenn das im normalen Modus möglich wäre.

Weblinks

ECMAScript 2017 (7th Edition, ECMA-262 Draft): Reserved Words

ECMAScript 2015 (6th Edition, ECMA-262): Reserved Words

MDN: Keywords