V8 V8: die Quadratur der JavaScript-Engine
Version 8.0 der JavaScript-Engine V8 bringt die geplanten JavaScript-Features Optional Chaining und den Nullish-Coalescing-Operator.
Google feiert kurz vor Weihnachten die Veröffentlichung von Version 8.0 der JavaScript-Engine V8, die das Team als V8 V8 bezeichnet. Neben einigen Performance-Verbesserungen und komprimierten 64-Bit-Pointern bringt die Open-Source-Engine zwei Features mit, die in JavaScript noch als experimentell gekennzeichnet sind: Optional Chaining und den Nullish-Coalescence-Operator.
Der Speicherbedarf ist dank einer neu eingeführten Kompression für Pointer geringer, bei der die Engine 64-Bit-Pointer nicht vollständig speichert und dafür doppelt so viel Speicher wie für 32-Bit-Architekturen benötigen würde. Stattdessen verwaltet sie lediglich die eindeutigen unteren Bits und synthetisiert daraus die oberen. Damit spart V8 laut Google 40 Prozent des Heap-Speicherbedarfs.
Erfüllte JavaScript-Wünsche
Sowohl der Nullish-Coalescing-Operator als auch das Optional Chaining stehen weit oben auf der Wunschliste der JavaScript-Entwickler. Beide Features sind derzeit als experimentell gekennzeichnet und sollen künftig Bestandteil von ECMAScript werden. Microsoft hatte beide Anfang November in TypeScript 3.7 aufgenommen.
Die zugehörige Syntax ist dieselbe wie in TypeScript: Ein Fragezeichen nimmt innerhalb einer verketteten Anweisung eine null-Prüfung für den Wert vor dem ?
vor. So ersetzt folgender Test aus dem V8-Blog
const nameLength = db?.user?.name?.length
die umständlichere und weniger übersichtliche Prüfung
let nameLength;
if (db && db.user && db.user.name)
nameLength = db.user.name.length;
Erwähnenswert ist, dass die Prüfung sich nur auf den Wert vor dem ?
bezieht. Sollte bei folgender Zeile
const nameLength = db?.user.name.length;
user
oder name
nicht definiert sein, führt sie zu einer Fehlermeldung.
Eine Frage der Definition
Der Nullish-Coalescing-Operator befindet sich derzeit in der dritten und damit vorletzten Stufe (Candidate Stage) beim TC39-Komitee zur Aufnahme in ECMAScript. In anderen Programmiersprachen heißt der Binäroperator auch Null Coalescing und existiert in unterschiedlichen Schreibweisen. Für JavaScript ist ebenso wie in TypeScript ein doppeltes Fragezeichen dafür vorgesehen. Der Operator ersetzt undefinierte Werte durch einen Standardwert. Folgende Codezeile
const x = foo ?? bar;
weist der Variable x
den Wert von foo
zu, wenn er weder null
noch undefined
ist. Ansonsten erhält x
den Wert von bar
.
Weitere Details zu V8 V8 lassen sich dem zugehörigen Blogbeitrag entnehmen. Wie üblich hat das Release der JavaScript-Engine Beta-Status, bis die zugehörige Chrome-Version erscheint. Eine Anleitung, wie Entwickler auf das Git-Repository zugreifen können, findet sich in der V8-Dokumentation. Außerdem ist die aktuelle Engine in der Beta zu Chrome 80 enthalten, die Google über den Chrome-Beta-Channel bereitstellt. (rme)