JavaScript Pearls

Heute haben wir uns im Team einfach mal zusammengesetzt und ausgetauscht, welche Eigenschaften wir an JavaScript besonders mögen.

Nachher

Echt jetzt? An JavaScript?

Das war schon lustig: Vor ein paar Jahren, als wir angefangen haben, Live-3D und damit ja auch in größerem Stil JavaScript zu programmieren (vorher waren wir eher auf dem Server und eher in Java unterwegs), da haben wir noch ziemlich abfällige Bemerkungen gemacht und uns nur mit JavaScript beschäftigt, weil es halt nicht anders ging (hat da echt jemand Flash gesagt?).

Heute fallen uns schon eine Reihe Dinge ein, die es natürlich auch anderswo gibt, die wir aber nicht mehr missen mögen.

Die Entwicklungsumgebung

Und damit meinen wir jetzt nicht VSCode oder PHPStorm, sondern den Browser. Chrome hat einen ziemlich guten Debugger (auch wenn er manchmal durcheinander kommt).

Und einfach jeder hat diese Laufzeitumgebung. Man kann jemandem ganz schnell einen Code senden zum Ausprobieren.

Und man kann in der Konsole auch selbst sehr einfach einmal schnell Dinge probieren.

Klassen und Objekte

Man kann supereinfach Objekte konstruieren.

Klar - JavaScript ist nicht typisiert und deshalb können einen alle möglichen Probleme zur Laufzeit in die Wade beissen.

Andererseits ist es halt sehr einfach, Datenstrukturen aufzubauen und zu durchlaufen. Man kann Methoden zu Objekten hinzufügen und so Verhalten kapseln und das alles sehr dynamisch und in angenehmer Notation.

Prototyping

object.[[Prototype]] ist das “Vaterobject” von object. Wenn es gesetzt ist, werden Attribute und Methode dort gesucht, wenn sie auf dem Objekt selbst nicht gefunden werden. Coole Sache!

Arrow-Functions

(a, b) => a+b ist einfach eine tolle Notation. Hier gibts nicht mal Probleme mit this.

Conditional Chaining

mein.object?.das?.vielleicht?.gar?.nicht?.da?.ist - na gut - ist vielleicht etwas übertrieben. Aber bei leeren Referenzen direkt undefined zurückzubekommen, ist ganz hilfreich.

Null coalescence

a ?? 12 ist eben doch was anderes als a || 12, weil z.B. weil es bei a=0 vernünftig funktioniert.

Template literale

`Es gibt ${count} Ergebnisse.`

sieht doch besser aus als

"Es gibt " + count + " Ergebnisse", 

oder? Über Template-Funktionen kann man ja streiten:

tag`template`

this!!!

Das Thema fällt natürlich immer, wenn über JavaScript geredet wird. Was zur Hölle ist denn jetzt grad this?

Eklig.

Da helfen so Aussagen wie “bei Funktionen der Laufzeit-, bei Arrow-Functions der lexikalische Scope” zumindest mir echt nur bedingt, ausprobieren ist angesagt. Kann aber richtig blöde Fehler zur Folge haben.