Aufzählungen haben nichts mit OOP zu tun, und JavaScript hat keine Aufzählungen. Stattdessen werden Aufzählungen verwendet, wenn eine Auswahl zwischen einem festen Satz von Werten besteht. Ein Boolescher Wert ist beispielsweise eine Wahl zwischen true und false, die als implementiert werden kann enum Bool { False, True }
. In einer GUI - Bibliothek, könnten wir eine ENUM für Ausrichtungen haben: enum HAlignment { LEFT = -1, CENTER = 0, RIGHT = 1 }
.
Es ist normalerweise unerheblich, wie die Aufzählung implementiert wird. Wichtig ist, dass jeder mögliche Wert unterschiedlich ist. Viele Sprachen verwenden Ganzzahlen für Aufzählungen, obwohl einige wie Java beliebige Objekte unterstützen.
Bisher hätten wir genauso gut Konstanten verwenden können, z const int LEFT = -1, CENTER = 0, RIGHT = 1
. Ein Compiler weiß jedoch, dass die Enum-Werte zusammengehören. Wenn ich also die Enum-Werte umschalte switch(value) {case LEFT: ...; case RIGHT: ...;}
, kann der Compiler mich warnen, dass ich den CENTER
Fall vergessen habe. Dies kann eine erhebliche Zeitersparnis bedeuten. In Sprachen ohne Aufzählungen oder ohne Switch-Case-Konstrukt kann dies mit dem Besuchermuster simuliert werden, obwohl dies bei statischer Typisierung hilfreicher ist.
Der andere Vorteil ist, dass Aufzählungen als separater Typ behandelt werden können. Ich kann zum Beispiel deklarieren, dass eine Methode einen HAlignment
Parameter und keine ganze Zahl akzeptiert. Der Code kann dann nicht kompiliert werden, wenn ich etwas anderes als einen der drei möglichen HAlignment-Werte bereitstelle. Die Aufzählungen von C sind jedoch nicht gut gekapselt, und die Aufzählungskonstanten können austauschbar mit ganzen Zahlen verwendet werden. Andere Sprachen sind hier strenger.
In JavaScript erhalten wir keinen dieser Vorteile. Das angegebene Beispiel deklariert ein Objekt, das als Aufzählung behandelt wird. Dies hat einige Vorteile für den Programmierer, zB erleichtert es die Dokumentation, gruppiert alle „Konstanten“ in einem einzigen Objekt,…. Es ist jedoch nur eine Konvention, dass ein solches Objekt enumartig ist.
Der Punkt hier ist, dass HTML nur eine begrenzte und bekannte Menge von Tags hat. Sie können sich die HTML5-Spezifikation ansehen und diese Elementnamen als Aufzählung in Ihren Code einfügen, wodurch es schwieriger wird, ein <blink>
Tag in Ihr Programm einzuschleusen. Es ist besser, dieses Wissen an einem Ort zu kodieren, um Ihren Code mit speziellen String-Literalen (oder schlimmer noch mit magischen Zahlen) zu verunreinigen.