JavaScript/Objekte/Array/of

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Die Methode of des Konstruktors Array gibt analog zum Aufruf des Konstruktors selbst ein neues Array zurück. Anders als beim Aufruf von Array wird dabei aber ein einzelner als Argument übergebener Wert von Datentyp Number nicht als als Wert der Eigenschaft length des erzeugten Arrays interpretiert.


Syntax

Array.of([...items])


Attribute
Writable true
Enumerable false
Configurable true


Prototyp


Eigenschaften


Beschreibung[Bearbeiten]

Array.of verhält sich von der Eingangs erwähnten Ausnahme abgesehen identisch zum Konstruktor Array selbst, dass heißt, sofern beim Aufruf keine Argumente übergeben wurden, wird ein leeres Array erzeugt und zurückgegeben. Werden hingegen Argumente übergeben, dann bilden die Werte der übergebenen Argumente die Elemente des erzeugten Arrays.


Beispiel
const empty = Array.of( );

const list = Array.of('miranda', 'ariel', 'titania');

const numbers = Array.of(3.5);


Der in der letzten Variante des Beispiels an die Methode of übergebene numerische Wert hätte beim Aufruf des Konstruktors Array einen Range Error erzeugt, da dieser bei der Übergabe nur eines Argumentes eine positive Ganzzahl und keine gebrochene Zahl erwartet. Hier wird der Wert stattdessen als erstes Element des neu erzeugten Arrays hinterlegt.

Eigene Eigenschaften[Bearbeiten]

Die Methode of verfügt standardmäßig über zwei eigene Eigenschaften, nämlich name und length. Als Wert der Eigenschaft name ist der String of hinterlegt, also der Name der Methode. Die Werte der Attribute dieser Objekteigenschaft sind false für Writable, false für Enumerable und true für Configurable. Die Eigenschaft ist also schreibgeschützt, kann aber durch Definition verändert werden.


Beispiel
console.log(Object.getOwnPropertyNames(Array.of)); // [length, name]

console.log(Array.of.name); // of

console.log(Array.of.length); // 0


Der Wert der Eigenschaft length ist 0, da die Methode über keine formalen Parameter verfügt, sondern nur über einen Restparameter. Dabei unterscheidet sie sich vom Konstruktor Array, für den ein formaler Parameter deklariert ist, der die Länge des zu erzeugenden Arrays bestimmt, was entsprechend bei dem Wert der Eigenschaft length von Array berücksichtigt wird. Die Werte der Attribute der Eigenschaft length von of sind dieselben wie bei der Eigenschaft name. Sie ist also ebenfalls schreibgeschützt, kann jedoch zum Beispiel unter Verwendung der Methode defineProperty des Konstruktors Object verändert werden.

Beispiel für Polyfill[Bearbeiten]

Da die Methode of erst in der sechsten Edition der Sprache standardisiert wurde und sie zum Zeitpunkt der Verwendung gegebenenfalls noch nicht von allen relevanten Ausführungsumgebungen unterstützt wird, sollte eventuell ein Polyfill bereitgestellt werden, dass wie in dem folgenden Beispiel aufgebaut sein kann. Der Stand der Unterstützung der Methode kann durch einen Blick auf die Tabelle zur Kompatibilität von Kangax in Erfahrung gebracht werden.


Beispiel
if (!Array.of) {

  Array.of = function of ( ) {
    return Array.prototype.slice.call(arguments);
  };

}


Wenn die Methode nicht unterstützt wird, dann wird eine entsprechende Funktion mit dem Namen of definiert, welche die an die Funktion übergebenen und in der Funktionsvariable arguments gespeicherten Argumente unter Verwendung der Methode slice in ein Array kopiert, und dieses dann zurückgibt.


Hinweis

Normalerweise ist es schlechte Praxis, an eingebauten Objekten Veränderungen vorzunehmen, da sich alle gegenwärtig oder zukünftig eingebundenen Programme innerhalb einer globalen Umgebung dieselben Objekte teilen. Die Manipulation dieser Objekte kann also zu Konflikten zwischen Programmen und mithin zu Fehlern führen. Die Bereitstellung von Polyfills für eventuell von der Ausführungsumgebung nicht unterstützte, standardkonforme Methoden wie in diesem Beispiel bildet jedoch eine Ausnahme von dieser Regel, denn die Verwendung von Sprachmitteln sollte grundsätzlich nicht davon abhängig gemacht werden, ob diese wirklich von allen Ausführungsumgebungen unterstützt werden, sondern allein davon, ob deren Verwendung für die Bewältigung der jeweiligen programmiertechnische Aufgabe die beste Wahl darstellt.

Weblinks[Bearbeiten]

  • ECMAScript 2017 (7th Edition, ECMA-262 Draft): Array.of
  • ECMAScript 2015 (6th Edition, ECMA-262): Array.of