JavaScript/Objekte/Map/set

Aus SELFHTML-Wiki
< JavaScript‎ | Objekte‎ | Map
Wechseln zu: Navigation, Suche

Die Methode set dient dazu einer Map Einträge hinzuzufügen.


Syntax

Map.prototype.set(key, value)


Attribute
Writable true
Enumerable false
Configurable true


Prototyp


Eigenschaften


Beschreibung[Bearbeiten]

Nachdem eine Map erzeugt wurde, können ihr Einträge nur noch einzeln hinzugefügt werden. Für diesen Zweck gibt es die Methode set, die zwei Parameter besitzt, von denen der erste den Schlüssel des Eintrags bestimmt und der zweite den Wert. Der Rückgabewert der Methode ist grundsätzlich eine Referenz auf die Map auf der sie aufgerufen wurde.


Beispiel
const map = new Map;

map.set('key', 'value');

console.log(map.has('key')); // true


In diesem Beispiel wird eine leere Map erzeugt, auf der danach die Methode set aufgerufen wird, wobei jeweils ein String für Schlüssel und Wert als Argument übergeben wird. Schließlich wird mit der Methode has überprüft, ob der Eintrag auch wirklich hinzugefügt wurde und das positive Ergebnis dieses Methodenaufrufs in die Konsole geschrieben.

Verkettung von Aufrufen[Bearbeiten]

Da der Rückgabewert der Methode set immer eine Referenz auf die Map ist, auf der die Methode aufgerufen wurde, ist es möglich mehrere Aufruf hintereinander auszuführen, ohne die jeweilige Map erneut referenzieren zu müssen. Die Aufrufe der Methode set können also verkettet werden.


Beispiel
const map = new Map( ).set('one', 1).set('two', 2);

const keys = Array.from(map.keys( ));

console.log(keys); // [one, two]


Hier wird dem Konstruktor Map bei seinem Aufruf kein iterierbares Objekt als Argument übergeben, das die Einträge enthält, mit denen die Map initialisiert werden soll. Statt dessen wird nach dem Aufruf von Map zweimal die Methode set aufgerufen, wobei der erste Aufruf die vom Konstruktor zurückgegebene Referenz auf die neue Map verwendet, und der zweite Aufruf die Referenz, die von der Methode set beim ersten Aufruf zurückgegeben wurde.


Beispiel
const map = new Map // Type Error

.set('key', 'value');


Ein klassischer Fehler bei dieser Variante des Methodenaufrufs ist es übrigens, die runden Klammern nach dem Bezeichner des Konstruktors wegzulassen. Dies ist immer dann möglich, wenn eine Funktion als Konstruktor aufgerufen wird und dabei keine Argumente übergeben werden sollen, da der Aufruf selbst bereits durch den Operator new erfolgt. Allerdings führt hier das Weglassen der Klammern dazu, dass die Methode set referenziert wird und nicht der Konstruktor Map. Der Versuch die Methode set als Konstruktor aufzurufen erzeugt dann im Ergebnis einen Typfehler.


Beispiel
const map = new Map( )
.set(true, 1)
.set(false, 0);

console.log(map.size); // 2


Kein Problem ist es aber jedenfalls, die verketteten Aufrufe der Methode set auf mehrere Zeilen zu verteilen, da anders als zum Beispiel bei einer Rückgabeanweisung, in diesem Fall nicht automatisch am Zeilenende ein Semikolon eingefügt wird.

Überschreiben von Einträgen[Bearbeiten]

Wird die Methode set auf einer Map aufgerufen und dabei als erstes Argument ein Schlüssel übergeben, zu dem in der Map bereits ein Eintrag existiert, dann wird der Wert des alten Eintrags durch den neuen Wert ersetzt. Der Eintrag selbst wird dabei jedoch nicht gelöscht und neu hinzugefügt, das heißt, die Reihenfolge der Einträge in der internen Liste der Map wird dabei nicht verändert.


Beispiel
const map = new Map([
  ['boolean', true],
  ['null', null]
]);

map.set('boolean', false);

for (let value of map.values( )) {
  console.info(value); // false, null
}


In diesem Beispiel wird beim Aufruf der Methode set ein Schlüssel übergeben, für den in der Map bereits ein Eintrag existiert. Dies hat zur Folge, dass der Wert des ersten Eintrags der Map durch den Wert ersetzt wird, welcher der Methode set als zweites Argument übergeben wurde. Die abschließende Iteration über die Werte der Map zeigt, dass die Reihenfolge der Einträge durch diese Operation nicht verändert wurde.

Zuviele oder zuwenige Argumente[Bearbeiten]

Werden der Methode set weniger oder mehr als zwei Argumente bei ihrem Aufruf übergeben, dann wird deswegen kein Typfehler geworfen. Stattdessen werden fehlende Argumente durch den Wert undefined ersetzt und überzählige Argumente ignoriert.


Beispiel
const map = new Map( ).set(1, 2, 3).set( );

console.log(map.size); // 2

map.forEach(function (value, key) {
  console.log([key, value]); // [1, 2], [undefined, undefined]
});


Hier werden beim ersten Aufruf der Methode set drei Argumente übergeben, aber wie die Ausgabe in der Konsole zeigt, wurde der überzählige Wert einfach ignoriert. Beim zweiten Aufruf wurden hingegen gar keine Argumente übergeben, was zur Folge hat, dass der Map ein Eintrag hinzugefügt wurde, bei dem sowohl der Schlüssel als auch der Wert mit undefined initialisiert wurde.

Eigene Eigenschaften[Bearbeiten]

Die die anderen Mapmethoden auch, besitzt die Methode set zwei eigene Eigenschaften mit den Namen length und name, wobei die Eigenschaft length die Anzahl der formalen Parameter der Methode wiedergibt, also den Wert Zwei hat. Die Eigenschaft name gibt den Namen der Methode zurück, also die Zeichenkette set.


Beispiel
const set = Map.prototype.set;

console.log(`${ set.length }, ${ set.name }`); // 2, set


Beide Eigenschaften sind nicht aufzählbar, der Wert des Attributes enumerable ist also in beiden Fällen false. Darüber hinaus sind beide Eigenschaften schreibgeschützt aber konfigurierbar, können also nicht durch einfache Zuweisung aber durch ausdrückliche Definition verändert werden.

Spezifikation[Bearbeiten]

Map.prototype.set ECMAScript 2015 ECMAScript 2016 ECMAScript 2017 Draft

Weblinks[Bearbeiten]