Interviewfragen zu JavaScript mit Antworten
Reines JS: Typen, Closures, this, Prototypen, Asynchronität und Event Loop, DOM und Browser-APIs.
225 Fragen fürs Vorstellungsgespräch zu JavaScript mit Antworten und Erklärungen: Level Junior, Middle und Senior. Beispielfragen, Online-Tests und Programmieraufgaben.
- Closures
- Event loop
- Promises
- Prototypes
- DOM
Fragen nach Level
Junior
Grundbegriffe und Syntax · 50 Fragen
Middle
Praxis, Feinheiten und Optimierung · 50 Fragen
Senior
Architektur, Interna, Randfälle · 50 Fragen
Beispielfragen
Ein paar Fragen aus jedem Level mit richtiger Antwort und Erklärung.
JavaScript · Junior
- Wie viele Datentypen hat JavaScript laut Spezifikation?
Antwort zeigen
Richtige Antwort: 8: sieben primitive Typen und
objectPrimitive:
number,bigint,string,boolean,null,undefined,symbol. Alles andere istobject, auch Arrays, Funktionen und Datumswerte. Funktionen sind Objekte, auch wenntypeoffür sie'function'liefert. - Was liefert
typeof null?Antwort zeigen
Richtige Antwort:
'object'Das ist ein historischer Fehler aus der ersten Implementierung der Sprache, der aus Kompatibilitätsgründen geblieben ist.
nullist ein eigener primitiver Typ. Man prüft darauf mit strikter Gleichheit:value === null. - Was liefert
typeof NaN?Antwort zeigen
Richtige Antwort:
'number'NaN(Not-a-Number) ist ein besonderer Wert des Typs number, das Ergebnis einer ungültigen Rechenoperation wie0 / 0oderNumber('abc'). Man prüft darauf mitNumber.isNaN(x). - Wie unterscheidet sich
letvonvar?Antwort zeigen
Richtige Antwort:
letgilt im{}-Block,varin der ganzen FunktionEin in einem
ifoderfordeklariertesvarist in der ganzen Funktion sichtbar. Außerdem wirdvarmit dem Wertundefinedgehoistet und auf oberster Ebene zu einer Eigenschaft vonwindow, währendletundconstbis zur Deklaration in der „Temporal Dead Zone“ liegen.
JavaScript · Middle
- Wie unterscheiden sich
call,applyundbindvoneinander?Antwort zeigen
Richtige Antwort:
call/applyrufen sofort auf,bindliefert eine neue Funktionfn.call(ctx, a, b)undfn.apply(ctx, [a, b])rufen sofort mit dem angegebenenthisauf.fn.bind(ctx, a)liefert eine Funktion mit dauerhaft gebundenem Kontext und teilweise angewendeten Argumenten. Auf Arrow Functions wirkt keines davon: Sie haben kein eigenesthis. - Wie sucht die Engine eine Eigenschaft, die das Objekt selbst nicht hat?
Antwort zeigen
Richtige Antwort: Sie geht die Prototypkette hinauf, bis sie die Eigenschaft findet oder
nullerreichtJedes Objekt hat eine versteckte Verbindung
[[Prototype]](Object.getPrototypeOf). So bekommen ArraysmapvonArray.prototypeund alle ObjektetoStringvonObject.prototype. Die Suche in Gültigkeitsbereichen betrifft Variablen, nicht Eigenschaften. - Was macht
Object.create(proto)?Antwort zeigen
Richtige Antwort: Erzeugt ein neues leeres Objekt mit dem Prototyp
protoDie Eigenschaften von
protowerden nicht kopiert - sie sind über die Prototypkette erreichbar.Object.create(null)erzeugt ein Objekt ganz ohne Prototyp: ein praktisches „sauberes“ Wörterbuch ohne geerbte Schlüssel wietoString. - Was sind Klassen in JavaScript eigentlich?
Antwort zeigen
Richtige Antwort: Syntax über prototypischer Vererbung mit einigen zusätzlichen Prüfungen
Klassenmethoden landen in
Class.prototype, undextendsbaut die Prototypkette. Es gibt aber Unterschiede zu Konstruktorfunktionen: Eine Klasse lässt sich nicht ohnenewaufrufen, ihr Rumpf läuft im Strict Mode, Methoden sind nicht aufzählbar, und es gibt private#x-Felder undstatic.
JavaScript · Senior
- Wie verarbeitet die Event Loop im Browser Aufgaben?
Antwort zeigen
Richtige Antwort: Eine Macrotask, dann die ganze Microtask-Warteschlange, dann eventuell ein Rendering
Nach jeder Macrotask (Skript, Event, Timer) wird die Microtask-Warteschlange komplett geleert, auch mit unterwegs hinzugefügten Microtasks. Dann kann der Browser das Rendering aktualisieren (und
requestAnimationFrameaufrufen), wenn es Zeit für einen Frame ist. Deshalb blockiert auch eine lange Kette von Microtasks das Rendering. - Wie verfolgt man im Browser global unbehandelte Ablehnungen von Promises?
Antwort zeigen
Richtige Antwort: Das Event
unhandledrejectionanwindowwindow.addEventListener('unhandledrejection', e => report(e.reason))ist der übliche Weg, solche Fehler an ein Monitoring zu senden. Synchrone unbehandelte Fehler fängt das Eventerroranwindow. Eine MethodePromise.onErrorgibt es nicht. - Was macht
for await...of?Antwort zeigen
Richtige Antwort: Läuft über ein asynchrones Iterable und wartet auf jeden Wert
Es funktioniert mit Objekten, die
Symbol.asyncIteratorhaben: asynchrone Generatoren, Streams (ReadableStream), API-Paginierung. Die Iterationen laufen nacheinander. Um ein Array von Promises parallel zu verarbeiten, nutzt manPromise.all. - Wofür wird
Proxyverwendet?Antwort zeigen
Richtige Antwort: Um Operationen an einem Objekt abzufangen: Lesen, Schreiben, Löschen
Traps wie
get,set,hasunddeletePropertyerlauben Reaktivität (so funktioniert Vue 3), Validierung, Logging und Standardwerte.Reflectliefert das Standardverhalten der Operationen zur Verwendung in Traps.
Kombinierte Tests mit diesem Thema
Fragen aus mehreren Themen auf einmal, wie im Vorstellungsgespräch für eine konkrete Stelle.
Programmieraufgaben
Schreib die Lösung direkt im Browser, und Tests prüfen sie sofort. Klassiker aus Vorstellungsgesprächen zu JavaScript (debounce, deepClone, Promise.all, LRU-Cache), zu TypeScript (Generics, Narrowing und Utility Types, geprüft von einem echten Compiler), Backend-Logik in Node.js (Middleware, Rate Limits, Job-Queues), SQL-Abfragen in echtem PostgreSQL und zu React: Komponenten und Hooks wie eine Aufgabenliste, Tabs, useDebounce und useInterval.
Aufgaben öffnen →