Tuples & Records sind bei TC39 ja auf das Composite-Objekt eingedampft worden, weil die Engine-Entwickler keine Lust hatten, 2 neue primitive Typen einzuführen. Das wäre für React etc. super praktisch gewesen, weil zusammengesetzte Typen mit Wertegleichheit sehr viel State-Memoization überflüssig gemacht hätte. Nebenbei hätte man mit ihnen auch zusammengesetzte Werte als Map
/Set
-Key benutzen können. Die Composites machen jetzt nur noch letzteres.
Das Composite ist dabei mehr ein Hack, als eine Spracherweiterung. Da wird für Maps/Sets einfach gesagt “wenn ein Key ein Composite
ist, mach als Key-Vergleich nicht ===
, sondern .equals
” Und .equals
implementiert dann einen Deep-Equal-Vergleich.
Dass man keine neuen primitiven Typen einführen will, finde ich ne komishce Ausrede. Genau das hat man vor gar nicht allzulanger Zeit für BigInt
getan. Und da fragen sich viele mittlerweile, ob es das überhaupt wert war, weil es kaum jemand benutzt.
Jedenfalls sind BigInts auch primitive Wertetypen und können dementsprechend als Key verwendet werden. Wenn man seine Daten also in einen BigInt packt, kann mehrere Daten als Key nehmen. Das ist um einiges Speichereffizienter, als sie in einen String zu packen und es kann beliebig viele Daten erfassen (im Gegensatz zu number
). Hier hat genau damit jemand rumgespielt.