From e5416ba1ae9229e80f590062175ec1d854b77e3b Mon Sep 17 00:00:00 2001 From: mmunin <221841703+mmunin@users.noreply.github.com> Date: Tue, 5 Aug 2025 15:31:01 +0200 Subject: [PATCH] Add [DE] Translation of root-level .md files --- de/Copyright.md | 35 +++++ de/Credits.md | 27 ++++ de/Dedication.md | 11 ++ de/Preface.md | 20 +++ de/References.md | 40 ++++++ de/SUMMARY.md | 171 ++++++++++++++++++++++++ de/date-and-time.md | 86 +++++++++++++ de/events.md | 79 ++++++++++++ de/json.md | 50 ++++++++ de/modules.md | 78 +++++++++++ de/regular-expression.md | 271 +++++++++++++++++++++++++++++++++++++++ de/resources.md | 72 +++++++++++ 12 files changed, 940 insertions(+) create mode 100644 de/Copyright.md create mode 100644 de/Credits.md create mode 100644 de/Dedication.md create mode 100644 de/Preface.md create mode 100644 de/References.md create mode 100644 de/SUMMARY.md create mode 100644 de/date-and-time.md create mode 100644 de/events.md create mode 100644 de/json.md create mode 100644 de/modules.md create mode 100644 de/regular-expression.md create mode 100644 de/resources.md diff --git a/de/Copyright.md b/de/Copyright.md new file mode 100644 index 00000000..00b5cd78 --- /dev/null +++ b/de/Copyright.md @@ -0,0 +1,35 @@ +--- +Seite: II +Kapitel: +--- + +# Copyright + +
+
+
+
+
+
+
+ + +**Learn JavaScript: Beginners Edition** +First Edition + +Copyright © 2023 by Suman Kunwar + + + + +Dieses Werk steht unter der Apache 2.0 Lizenz ([Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0)). +Basierend auf einem Werk auf [javascript.sumankunwar.com.np](https://javascript.sumankunwar.com.np/). + +ASIN: B0C53J11V7 + +ISBN: 9789937171892 +
+![ISBN](../.gitbook/assets/isbn.png) + + + diff --git a/de/Credits.md b/de/Credits.md new file mode 100644 index 00000000..ff80bf07 --- /dev/null +++ b/de/Credits.md @@ -0,0 +1,27 @@ +--- +Seite: VI +Kapitel: +--- + +### Projektverantwortlicher +--- + + + + + +
+ + Profilbild +
+ Suman Kunwar +
+
+ + +### Mitwirkende +--- + + + + diff --git a/de/Dedication.md b/de/Dedication.md new file mode 100644 index 00000000..0c283a86 --- /dev/null +++ b/de/Dedication.md @@ -0,0 +1,11 @@ +--- +Seitenzahl: I +Kapitel: +--- +# Widmung + +Dieses Buch ist dem Geist der Computer und Programmiersprachen in unserer Welt gewidmet – in Respekt und Bewunderung. + +> „Die Kunst des Programmierens ist die Kunst, Komplexität zu organisieren, Vielfalt zu meistern und ihr chaotisches Durcheinander so effektiv wie möglich zu vermeiden.“ +> +> - Edsger Dijkstra diff --git a/de/Preface.md b/de/Preface.md new file mode 100644 index 00000000..4f91acaf --- /dev/null +++ b/de/Preface.md @@ -0,0 +1,20 @@ +--- +Seite: III +Kapitel: +--- +# Vorwort + +„Learn JavaScript: Beginner's Edition“ ist ein Buch, das eine umfassende Einführung in JavaScript bietet und die Sprache als essenziell in der sich ständig wandelnden digitalen Welt positioniert. Mit einem Fokus auf Grundlagen und Praxis richtet sich dieses Werk an alle, die die Programmiersprache JavaScript erlernen möchten. + +Das Buch beginnt mit den grundlegenden Aspekten von JavaScript und entwickelt sich schrittweise zu fortgeschritteneren Techniken. Es behandelt zentrale Themen wie Variablen, Datentypen, Kontrollstrukturen, Funktionen, objektorientierte Programmierung, Closures, Promises und moderne Syntax. Jedes Kapitel baut auf dem vorherigen auf und schafft so eine solide Basis für Lernende, um komplexe Konzepte besser zu verstehen. + +Ein herausragendes Merkmal von „Learn JavaScript“ ist der praxisorientierte Ansatz. Das Buch enthält praktische Übungen, Programmieraufgaben und reale Problemstellungen, die es den Leserinnen und Lesern ermöglichen, ihr Wissen anzuwenden und wichtige Fähigkeiten zu entwickeln. Durch greifbare Beispiele gewinnen sie das nötige Selbstvertrauen, um typische Herausforderungen der Webentwicklung zu meistern und das Potenzial von JavaScript für innovative Lösungen zu nutzen. + +Komplexe Konzepte wie Closures und asynchrone Programmierung werden durch intuitive Erklärungen und praxisnahe Beispiele verständlich gemacht. Die Betonung von Klarheit und Einfachheit ermöglicht es Lernenden aller Erfahrungsstufen, die zentralen Inhalte effektiv zu erfassen und zu behalten. Das Buch ist in drei Teile gegliedert: Die ersten 14 Kapitel behandeln die Kernkonzepte. Die folgenden vier Kapitel widmen sich der Nutzung von JavaScript für die Programmierung im Webbrowser, gefolgt von einem Abschnitt mit verschiedenen Themen, serverseitiger Programmierung und Übungsaufgaben. Der Abschnitt „Miscellaneous“ beleuchtet wichtige Themen und Szenarien rund um die JavaScript-Programmierung und schließt mit Aufgaben zur Vertiefung ab. + +Der Kurs deckt zusätzliche Themen wie Interviewfragen, Design Patterns, Dateisystemkonzepte und ES6 ab, um ein umfassendes Verständnis der Sprache zu vermitteln. Der Fokus liegt auf dem Schreiben von effizientem, wartbarem Code – ein wertvoller Ansatz sowohl für Jobsuchende als auch für persönliche Projekte. + +Zusammenfassend ist „Learn JavaScript: Beginner's Edition“ ein unverzichtbarer Begleiter für alle, die JavaScript meistern und in der Webentwicklung erfolgreich sein möchten. Mit seiner umfassenden Darstellung, dem praxisnahen Zugang, klaren Erklärungen, dem Fokus auf reale Anwendungen und dem Engagement für kontinuierliches Lernen stellt dieses Buch eine wertvolle Ressource dar. Wer sich intensiv mit dem Inhalt auseinandersetzt, wird die Fähigkeiten und das Wissen erwerben, um dynamische und interaktive Webanwendungen zu entwickeln – und sein volles Potenzial als JavaScript-Entwickler entfalten. + + + diff --git a/de/References.md b/de/References.md new file mode 100644 index 00000000..3a2e81ae --- /dev/null +++ b/de/References.md @@ -0,0 +1,40 @@ +--- +Seite: IV +Kapitel: +-------- + +# Literaturverzeichnis + +Ballard, P. (2018). *JavaScript in 24 Hours, Sams Teach Yourself*. Sams Publishing. + +Crockford, D. (2008). *JavaScript: The Good Parts*. O’Reilly Media. + +Duckett, J. (2011). *HTML & CSS: Design and Build Websites*. Wiley. + +Duckett, J. (2014). *JavaScript and JQuery: Interactive Front-End Web Development*. Wiley. + +Flanagan, D. (2011). *JavaScript: The Definitive Guide*. O’Reilly Media. + +Freeman, E., & Robson, E. (2014). *Head First JavaScript Programming: A Brain-Friendly Guide*. O’Reilly Media. + +Frisbie, M. (2019). *Professional JavaScript for Web Developers*. Wrox. + +Haverbeke, M. (2019). *Eloquent JavaScript: A Modern Introduction to Programming*. No Starch Press. + +Herman, D. (2012). *Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript*. Addison-Wesley Professional. + +McPeak, J., & Wilton, P. (2015). *Beginning JavaScript*. Wiley. + +Morgan, N. (2014). *JavaScript for Kids: A Playful Introduction to Programming*. No Starch Press. + +Murphy, C., Clark, R., Studholme, O. u.a. (2014). *Beginning HTML5 and CSS3: The Web Evolved*. Apress. + +Nixon, R. (2021). *Learning PHP, MySQL & JavaScript: With jQuery, CSS & HTML5*. O’Reilly Media. + +Powell, T., & Schneider, F. (2012). *JavaScript: The Complete Reference*. McGraw-Hill Education. + +Resig, J. (2007). *Pro JavaScript Techniques*. Apress. + +Resig, J., & Bibeault, B. (2016). *Secrets of the JavaScript Ninja*. Manning Publications. + +Robbins, J. N. (2014). *Learning Web Design: A Beginner’s Guide to HTML, CSS, JavaScript, and Web Graphics*. O’Reilly Media. diff --git a/de/SUMMARY.md b/de/SUMMARY.md new file mode 100644 index 00000000..10014c2f --- /dev/null +++ b/de/SUMMARY.md @@ -0,0 +1,171 @@ +# Inhaltsverzeichnis + +- [Widmung](Dedication.md) +- [Urheberrecht](Copyright.md) +- [Vorwort](Preface.md) +- [Einführung](README.md) +- [Grundlagen](basics/README.md) + - [Kommentare](basics/comments.md) + - [Variablen](basics/variables.md) + - [Datentypen](basics/types.md) + - [Vergleichsoperatoren](basics/equality.md) +- [Zahlen](numbers/README.md) + - [Mathematik](numbers/math.md) + - [Grundlegende Operatoren](numbers/operators.md) + - [Erweiterte Operatoren](numbers/advanced.md) +- [Zeichenketten](strings/README.md) + - [Erstellung](strings/create.md) + - [Ersetzen](strings/replace.md) + - [Länge](strings/length.md) + - [Verkettung](strings/concat.md) + - [Aufteilen](strings/split.md) + - [CharAt](strings/charAt.md) + - [Substring](strings/substring.md) +- [Bedingte Logik](conditional/README.md) + - [If](conditional/if.md) + - [Else](conditional/else.md) + - [Switch](conditional/switch.md) + - [Vergleiche](conditional/comparators.md) + - [Verkettung](conditional/concatenate.md) +- [Arrays](arrays/README.md) + - [Unshift](arrays/unshift.md) + - [Map](arrays/map.md) + - [Spread](arrays/spread.md) + - [Shift](arrays/shift.md) + - [Pop](arrays/pop.md) + - [Join](arrays/join.md) + - [Länge](arrays/length.md) + - [Push](arrays/push.md) + - [For Each](arrays/for-each.md) + - [Sortieren](arrays/sort.md) + - [Indizes](arrays/indices.md) + - [Umkehren](arrays/reverse.md) + - [Slice](arrays/slice.md) +- [Schleifen](loops/README.md) + - [For](loops/for.md) + - [While](loops/while.md) + - [Do...While](loops/dowhile.md) + - [Continue](loops/continue.md) + - [Break](loops/break.md) +- [Funktionen](functions/README.md) + - [Höherwertige Funktionen](functions/higher-order.md) + - [Rekursive Funktionen](functions/recursive-functions.md) + - [Closures](functions/closures.md) + - [Set Interval](functions/set-interval.md) + - [Set Timeout](functions/set-timeout.md) + - [Rest-Operator](functions/rest-operator.md) + - [This-Schlüsselwort](functions/this-keyword.md) + - [Hoisting](functions/hoisting.md) + - [Getter und Setter](functions/getters-setters.md) +- [Objekte](objects/README.md) + - [Eigenschaften](objects/properties.md) + - [Mutierbarkeit](objects/mutable.md) + - [Referenz](objects/reference.md) + - [Prototyp](objects/prototype.md) + - [Delete-Operator](objects/delete.md) + - [Aufzählung](objects/enumeration.md) + - [Factory-Funktionen](objects/factory-functions.md) + - [Konstruktorfunktionen](objects/constructor-functions.md) + - [Konstruktor-Eigenschaft](objects/constructor-property.md) + - [Dynamische Natur](objects/dynamic-nature.md) +- [Datum und Zeit](date-and-time.md) +- [JSON](json.md) +- [Fehlerbehandlung](error-handling/README.md) + - [Try...Catch](error-handling/try...-catch.md) + - [Try...Catch...Finally](error-handling/try...catch...finally.md) + - [Asynchrone Fehlerbehandlung](error-handling/async_errorhandling.md) +- [Module](modules.md) +- [Reguläre Ausdrücke](regular-expression.md) +- [Klassen](classes/README.md) + - [Statisch](classes/static.md) + - [Vererbung](classes/inheritance.md) + - [Zugriffsmodifikatoren](classes/access-modifiers.md) +- [Browser Object Model (BOM)](browser-object-model-bom/README.md) + - [Fenster](browser-object-model-bom/window.md) + - [Popup](browser-object-model-bom/popup.md) + - [Bildschirm](browser-object-model-bom/screen.md) + - [Navigator](browser-object-model-bom/navigator.md) + - [Cookies](browser-object-model-bom/cookies.md) + - [Verlauf](browser-object-model-bom/history.md) + - [Standort](browser-object-model-bom/location.md) +- [Events](events.md) +- [Promise, async/await](promise-async-await/README.md) + - [Promise](promise-async-await/promise.md) + - [Async/Await](promise-async-await/async-await.md) +- [Verschiedenes](miscellaneous/README.md) + - [Template Literals](miscellaneous/template-literals.md) + - [Hoisting](miscellaneous/hoisting.md) + - [Currying](miscellaneous/currying.md) + - [Polyfills und Transpiler](miscellaneous/polyfills-and-transpilers.md) + - [Verkettete Liste](miscellaneous/linked-list.md) + - [Globaler Fußabdruck](miscellaneous/global-footprint.md) + - [Debugging](miscellaneous/debugging.md) + - [JS-Anwendung erstellen und bereitstellen](miscellaneous/building-and-deploying.md) + - [Callback](miscellaneous/callback.md) + - [Web API und AJAX](miscellaneous/api-ajax.md) + - [Einzel-Thread-Natur](miscellaneous/single-thread-nature.md) + - [ECMA Script](miscellaneous/ECMA-script.md) + - [Testing](miscellaneous/testing.md) +- [Serverseitig](server-side/README.md) + - [Node.js](server-side/nodejs.md) + - [Serverseitiges Rendering](server-side/server-side-rendering.md) +- [Übungen](exercises/README.md) + - [Konsole](exercises/console.md) + - [Multiplikation](exercises/multiplication.md) + - [Benutzereingabe-Variablen](exercises/user-input-variables.md) + - [Konstanten](exercises/constants.md) + - [Verkettung](exercises/concatenation.md) + - [Funktionen](exercises/functions.md) + - [Bedingte Anweisungen](exercises/conditional-statements.md) + - [Objekte](exercises/objects.md) + - [FizzBuzz-Problem](exercises/fizzbuzz-problem.md) + - [Titel abrufen!](exercises/get-the-titles.md) +- [Interviewfragen (Bonus)](interview-questions/README.md) + - [Grundlagen](interview-questions/basic-level.md) + - [Mittelstufe](interview-questions/intermediate-level.md) + - [Fortgeschritten](interview-questions/advance-level.md) +- [Design Patterns (Bonus)](design-patterns/README.md) + - [Erzeugungsmuster](design-patterns/creational-patterns.md) + - [Strukturebene](design-patterns/structural-patterns.md) + - [Verhaltensebene](design-patterns/behavioral-patterns.md) +- [Dateisystem (Bonus)](file-system/README.md) +- [ES6-Konzepte (Bonus)](es6-concepts/README.md) + - [let und const](es6-concepts/let-const.md) + - [Map](es6-concepts/map.md) + - [Arrow-Funktionen](es6-concepts/arrow-functions.md) + - [Destructuring](es6-concepts/destructuring.md) + - [Template Literals](es6-concepts/template-literals.md) +- [Animationsressourcen (Bonus)](animation-resources/README.md) + - [GSAP](animation-resources/gsap.md) + - [Anime JS](animation-resources/animejs.md) + - [Three JS](animation-resources/threejs.md) + - [Velocity JS](animation-resources/velocityjs.md) + - [React Spring](animation-resources/react-spring.md) + - [Framer Motion](animation-resources/framer-motion.md) +- [Komplexität (Bonus)](complexity/README.md) + - [Speicherkomplexität](complexity/space-complexity.md) + - [Zeitkomplexität](complexity/time-complexity.md) +- [JavaScript hinter den Kulissen (Bonus)](behind-scenes/README.md) + - [Call Stack](behind-scenes/call-stack.md) + - [JavaScript-Engine](behind-scenes/engine.md) + - [Event Loop](behind-scenes/event-loop.md) + - [Ausführungskontext](behind-scenes/execution-context.md) + - [Speicher-Heap](behind-scenes/memory-heap.md) +- [Laufzeitumgebung](behind-scenes/runtime-environment.md) +- [Document Object Model (DOM)](document-object-model/README.md) + - [DOM-API](document-object-model/dom-api.md) + - [DOM-Manipulation](document-object-model/dom-manipulation.md) + - [Event-Listener](document-object-model/listening-of-events.md) +- [Referenzen](References.md) +- [Ressourcen](resources.md) + - [Digitale Uhr](./beginner-projects/digital-clock.md) + - [Elektronisches Schlagzeug](./beginner-projects/electronic-drum-kit.md) + - [Bildersuche](./beginner-projects/image-search.md) + - [Monatskalender](./beginner-projects/monthly-calendar.md) + - [Zufällige Fotos](./beginner-projects/random-photos-generator.md) + - [Schere-Stein-Papier-Spiel](./beginner-projects/rock-paper-scissors-game.md) + - [Stoppuhr](./beginner-projects/simple-stopwatch.md) + - [Trinkgeldrechner](./beginner-projects/tip-calculator.md) + - [Video-Trailer-Popup](./beginner-projects/video-trailer-popup.md) + - [Wetter-App](./beginner-projects/weather-app.md) +- [Danksagung](Credits.md) diff --git a/de/date-and-time.md b/de/date-and-time.md new file mode 100644 index 00000000..86f9e61e --- /dev/null +++ b/de/date-and-time.md @@ -0,0 +1,86 @@ + + +--- + +layout: editorial +Kapitel: 10 +Seite: 79 +description: Das `Date`-Objekt speichert Datum und Uhrzeit und bietet Methoden zu deren Verwaltung. `Date`-Objekte sind statisch und verwenden die Standard-Zeitzone des Browsers, um das Datum als vollständige Zeichenkette anzuzeigen. +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +# Kapitel 10 + + +# Datum und Uhrzeit + +Das `Date`-Objekt speichert Datum und Uhrzeit und bietet Methoden zu deren Verwaltung. `Date`-Objekte sind statisch und verwenden die Standard-Zeitzone des Browsers, um das Datum als vollständige Zeichenkette anzuzeigen. + +Um ein `Date` zu erstellen, verwenden wir den Konstruktor `new Date()`, welcher auf folgende Weise aufgerufen werden kann: + +```javascript +new Date() +new Date(date string) +new Date(year,month) +new Date(year,month,day) +new Date(year,month,day,hours) +new Date(year,month,day,hours,minutes) +new Date(year,month,day,hours,minutes,seconds) +new Date(year,month,day,hours,minutes,seconds,ms) +new Date(milliseconds) +``` + +{% hint style="warning" %} +Monate können von `0` bis `11` angegeben werden, darüber hinaus erfolgt ein Überlauf in das nächste Jahr. +{% endhint %} + +Die von `Date` unterstützten Methoden und Eigenschaften sind unten beschrieben: + +| Name | Beschreibung | +| ---------------------- |-----------------------------------------------------------------------------------------------------------| +| `constructor` | Gibt die Funktion zurück, die das Prototypobjekt von Date erstellt hat | +| `getDate()` | Gibt den Tag (1–31) des Monats zurück | +| `getDay()` | Gibt den Wochentag (0–6) zurück | +| `getFullYear()` | Gibt das Jahr (vierstellig) zurück | +| `getHours()` | Gibt die Stunde (0–23) zurück | +| `getMilliseconds()` | Gibt die Millisekunden (0–999) zurück | +| `getMinutes()` | Gibt die Minuten (0–59) zurück | +| `getMonth()` | Gibt den Monat (0–11) zurück | +| `getSeconds()` | Gibt die Sekunden (0–59) zurück | +| `getTime()` | Gibt den numerischen Wert des Datums in Millisekunden seit Mitternacht am 1. Januar 1970 zurück | +| `getTimezoneOffset()` | Gibt die Zeitverschiebung zur UTC in Minuten zurück | +| `getUTCDate()` | Gibt den Tag (1–31) des Monats nach UTC zurück | +| `getUTCDay()` | Gibt den Wochentag (0–6) nach UTC zurück | +| `getUTCFullYear()` | Gibt das Jahr (vierstellig) nach UTC zurück | +| `getUTCHours()` | Gibt die Stunde (0–23) nach UTC zurück | +| `getUTCMilliseconds()` | Gibt die Millisekunden (0–999) nach UTC zurück | +| `getUTCMinutes()` | Gibt die Minuten (0–59) nach UTC zurück | +| `getUTCMonth()` | Gibt den Monat (0–11) nach UTC zurück | +| `getUTCSeconds()` | Gibt die Sekunden (0–59) nach UTC zurück | +| `now()` | Gibt den numerischen Wert in Millisekunden seit Mitternacht am 1. Januar 1970 zurück | +| `parse()` | Parst den Datumsstring und gibt den numerischen Wert in Millisekunden seit Mitternacht am 1.1.1970 zurück | +| `prototype` | Ermöglicht das Hinzufügen von Eigenschaften und Methoden zum Date-Prototyp | +| `setDate()` | Setzt den Tag des Monats | +| `setFullYear()` | Setzt das Jahr | +| `setHours()` | Setzt die Stunde | +| `setMilliseconds()` | Setzt die Millisekunden | +| `setMinutes()` | Setzt die Minuten | +| `setMonth()` | Setzt den Monat | +| `setSeconds()` | Setzt die Sekunden | +| `setTime()` | Setzt die Zeit | +| `setUTCDate()` | Setzt den Tag des Monats nach UTC | +| `setUTCFullYear()` | Setzt das Jahr nach UTC | +| `setUTCHours()` | Setzt die Stunde nach UTC | +| `setUTCMilliseconds()` | Setzt die Millisekunden nach UTC | +| `setUTCMinutes()` | Setzt die Minuten nach UTC | +| `setUTCMonth()` | Setzt den Monat nach UTC | +| `setUTCSeconds()` | Setzt die Sekunden nach UTC | +| `toDateString()` | Gibt das Datum in menschenlesbarem Format zurück | +| `toISOString()` | Gibt das Datum im ISO-Format zurück | +| `toJSON()` | Gibt das Datum als Zeichenkette im JSON-Datumsformat zurück | +| `toLocaleDateString()` | Gibt das Datum als Zeichenkette unter Verwendung lokaler Konventionen zurück | +| `toLocaleTimeString()` | Gibt die Zeit als Zeichenkette unter Verwendung lokaler Konventionen zurück | +| `toLocaleString()` | Gibt Datum und Zeit unter Verwendung lokaler Konventionen zurück | +| `toString()` | Gibt die Zeichenketten-Darstellung des angegebenen Datums zurück | +| `toTimeString()` | Gibt den *Zeit*-Anteil in menschenlesbarem Format zurück | +| `toUTCString()` | Konvertiert das Datum in eine Zeichenkette im UTC-Format | +| `valueOf()` | Gibt den primitiven Wert des `Date` zurück | diff --git a/de/events.md b/de/events.md new file mode 100644 index 00000000..c72e73e1 --- /dev/null +++ b/de/events.md @@ -0,0 +1,79 @@ +--- +layout: editorial +Kapitel: 17 +Seite: 106 +Beschreibung: In der Programmierung sind Ereignisse Aktionen oder Vorkommnisse in einem System, über die das System informiert, damit du darauf reagieren kannst. Wenn du zum Beispiel auf den Zurücksetzen-Button klickst, wird die Eingabe gelöscht. +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +# Kapitel 17 +# Ereignisse + +In der Programmierung sind *Ereignisse* Aktionen oder Vorkommnisse in einem System, über die das System informiert, damit du darauf reagieren kannst. Wenn du zum Beispiel auf den Zurücksetzen-Button klickst, wird die Eingabe gelöscht. + +Interaktionen über die Tastatur, wie z. B. Tastendrücke, müssen ständig gelesen werden, um den Zustand der Taste zu erfassen, bevor sie wieder losgelassen wird. Wenn gleichzeitig rechenintensive Operationen durchgeführt werden, kann es passieren, dass ein Tastendruck verpasst wird. Das war früher die Eingabeverarbeitung auf einigen primitiven Maschinen. Eine Weiterentwicklung davon ist die Verwendung einer Warteschlange, also ein Programm, das regelmäßig die Warteschlange auf neue Ereignisse überprüft und darauf reagiert. Dieser Ansatz wird *Polling* genannt. + +Der Hauptnachteil dieses Ansatzes ist, dass er die Warteschlange in regelmäßigen Abständen prüfen muss, was zu Störungen führen kann, wenn ein Ereignis ausgelöst wird. Die bessere Lösung ist es, den Code direkt zu benachrichtigen, wenn ein Ereignis auftritt. Moderne Browser ermöglichen genau das, indem sie erlauben, Funktionen als *Handler* für bestimmte Ereignisse zu registrieren. + +```javascript +

Click me to activate the handler.

+ +``` + +Hier wird `addEventListener` am `window`-Objekt (ein vom Browser bereitgestelltes eingebautes Objekt) aufgerufen, um einen Handler für das gesamte `window` zu registrieren. Der Aufruf der Methode `addEventListener` registriert das zweite Argument als Funktion, die aufgerufen wird, sobald das durch das erste Argument beschriebene Ereignis eintritt. + +{% hint style="info" %} +Ereignis-Listener werden nur aufgerufen, wenn das Ereignis im Kontext des Objekts passiert, auf dem sie registriert wurden. +{% endhint %} + +Einige der häufigen HTML-Ereignisse sind hier aufgeführt: + +| Ereignis | Beschreibung | +| ------------- |---------------------------------------------------------| +| `onclick` | Wenn der Benutzer auf das Element klickt | +| `onchange` | Wenn der Benutzer den Wert einer Formulareingabe ändert | +| `onkeydown` | Wenn der Benutzer eine Taste drückt | +| `onload` | Wenn der Browser das Laden abgeschlossen hat | +| `onmouseout` | Wenn der Mauszeiger das Element verlässt | +| `onmouseover` | Wenn der Mauszeiger über das Element bewegt wird | + + +Es ist üblich, dass Handler, die auf Knoten mit Kindelementen registriert sind, auch Ereignisse von diesen Kindknoten empfangen. Wenn beispielsweise ein Button innerhalb eines Absatzes geklickt wird, empfängt auch der Handler des Absatzes das Klick-Ereignis. Wenn in beiden ein Handler vorhanden ist, wird der innere zuerst ausgeführt. Man sagt, das Ereignis *propagiert* nach außen – vom auslösenden Knoten über dessen Eltern bis hin zur Wurzel des Dokuments. + +Der Ereignis-Handler kann die Methode `stopPropagation` am Ereignisobjekt aufrufen, um zu verhindern, dass weiter oben liegende Handler das Ereignis ebenfalls erhalten. Das ist nützlich, wenn du zum Beispiel einen Button in einem klickbaren Element hast und vermeiden möchtest, dass ein Klick auf den Button das äußere Element ebenfalls auslöst. + +```javascript +

A paragraph with a .

+ +``` + +Hier sind sowohl am Absatz als auch am Button *`mousedown`*-Handler registriert. Beim Klick auf den Button ruft der Handler des Buttons `stopPropagation` auf, wodurch verhindert wird, dass der Handler des Absatzes ausgeführt wird. + +Ereignisse können ein Standardverhalten haben. Zum Beispiel: Ein Link navigiert beim Anklicken zur Zieladresse, beim Drücken der Abwärtstaste wird zum unteren Seitenbereich navigiert usw. Dieses Standardverhalten kann durch Aufruf der Methode `preventDefault` am Ereignisobjekt verhindert werden. + +```javascript +MDN + +``` + +Hier wird das Standardverhalten des Links beim Klick verhindert – also das Navigieren zur Zieladresse des Links. + diff --git a/de/json.md b/de/json.md new file mode 100644 index 00000000..8761a6e2 --- /dev/null +++ b/de/json.md @@ -0,0 +1,50 @@ +--- +layout: editorial +Kapitel: 11 +Seite: 82 +Beschreibung: JSON (JavaScript Object Notation) ist ein leichtgewichtiges Datenformat zum Austausch von Daten zwischen verschiedenen Systemen und Plattformen. Es wird häufig zur Datenübertragung und -speicherung verwendet, insbesondere in der Webentwicklung. +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +# Kapitel 11 +# JSON + +**J**ava**S**cript **O**bject **N**otation (JSON) ist ein textbasiertes Format zum Speichern und Übertragen von Daten. JavaScript-Objekte lassen sich leicht in JSON umwandeln und wieder zurück. Zum Beispiel: + +```javascript +// ein JavaScript-Objekt +let myObj = { name:"Ryan", age:30, city:"Austin" }; + +// in JSON konvertiert: +let myJSON = JSON.stringify(myObj); +console.log(myJSON); +// Ergebnis: '{"name":"Ryan","age":30,"city":"Austin"}' + +// zurückkonvertiert in ein JavaScript-Objekt +let originalJSON = JSON.parse(myJSON); +console.log(originalJSON); + +// Ergebnis: {name: 'Ryan', age: 30, city: 'Austin'} +``` + + + +`stringify` und `parse` sind die beiden Methoden, die von JSON unterstützt werden. + +| Methode | Beschreibung | +| ------------- | --------------------------------------------------------------- | +| `parse()` | Gibt ein JavaScript-Objekt aus dem geparsten JSON-String zurück | +| `stringify()` | Gibt einen JSON-String aus einem JavaScript-Objekt zurück | + + + +Die folgenden Datentypen werden von JSON unterstützt: + +* [string](./strings/README.md) +* [number](./numbers/README.md) +* [array](./arrays/README.md) +* [boolean](./basics/types.md#Boolean) +* [object](./basics/types.md#Object) mit gültigen JSON-Werten +* [null](./basics/types.md#NULL) + +JSON kann **keine** `function`, `date` oder `undefined` enthalten. + diff --git a/de/modules.md b/de/modules.md new file mode 100644 index 00000000..0259af5f --- /dev/null +++ b/de/modules.md @@ -0,0 +1,78 @@ +--- +layout: editorial +Kapitel: 13 +Seite: 87 +Beschreibung: Module sind eine Möglichkeit, Code in separate, wiederverwendbare und gekapselte Komponenten zu organisieren. Sie ermöglichen es Entwicklern, große und komplexe Codebasen in kleinere, handhabbare Teile zu zerlegen, was das Verständnis, die Wartung und die Zusammenarbeit erleichtert. +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +# Kapitel 13 +# Module + +In der realen Welt wächst ein Programm organisch mit den Anforderungen neuer Funktionalitäten. Mit wachsendem Codeumfang erfordert die Strukturierung und Wartung des Codes zusätzlichen Aufwand. Auch wenn sich dieser Aufwand langfristig auszahlt, ist es verlockend, ihn zu vernachlässigen und zuzulassen, dass Programme stark miteinander verflochten werden. In Wirklichkeit erhöht das jedoch die Komplexität der Anwendung, da man gezwungen ist, ein ganzheitliches Verständnis des Systems zu entwickeln und Schwierigkeiten hat, einzelne Teile isoliert zu betrachten. Außerdem muss man mehr Zeit investieren, um Funktionen aus einem stark verflochtenen Code herauszulösen. + +*Module* helfen dabei, diese Probleme zu vermeiden. Ein `Modul` gibt an, von welchen Codeteilen es abhängt, und welche Funktionalität es anderen Modulen zur Verfügung stellt. Module, die von anderen Modulen abhängen, nennt man *Abhängigkeiten*. Es gibt verschiedene Bibliotheken zur Modulverwaltung, die Code in Module organisieren und bei Bedarf laden können: + +* **AMD** – eines der ältesten Modulsysteme, ursprünglich verwendet von [require.js](https://requirejs.org/) +* **CommonJS** – Modulsystem, das für den Node.js-Server entwickelt wurde +* **UMD** – Modulsystem, das mit [AMD](https://requirejs.org/docs/whyamd.html#amd) und [CommonJS](https://requirejs.org/docs/whyamd.html#commonjs) kompatibel ist + +Module können andere Module laden und sich gegenseitig verwenden. Dazu nutzen sie spezielle Direktiven wie `import` und `export`, um Funktionalität auszutauschen und Funktionen aufzurufen: + +* `export` – markiert Funktionen und Variablen, die von außerhalb des aktuellen Moduls zugänglich sein sollen +* `import` – importiert Funktionalität aus einem externen Modul + +Sehen wir uns den Mechanismus von `import` und `export` in Modulen an. Die Funktion `sayHi` wird aus der Datei `sayHi.js` exportiert: + +```javascript +// 📁 sayHi.js +export const sayHi = (user) => { + alert(`Hello, ${user}!`); +} +``` + +Die Funktion `sayHi` wird in der Datei `main.js` mithilfe der Direktive `import` verwendet: + +```javascript +// 📁 main.js +import {sayHi} from './sayHi.js'; + +alert(sayHi); // function... +sayHi('Kelvin'); // Hello, Kelvin! +``` + +Hier lädt die `import`-Direktive das Modul über den relativen Pfad und weist die Variable `sayHi` zu. + +Module können auf zwei Arten exportiert werden: **Named** (benannter Export) und **Default** (Standardexport). Zudem können benannte Exporte inline oder gesammelt angegeben werden: + +```javascript +// 📁 person.js + +// inline benannte Exporte +export const name = "Kelvin"; +export const age = 30; + +// gesammelt +const name = "Kelvin"; +const age = 30; +export {name, age}; +``` + +{% hint style="warning" %} +Eine Datei darf nur einen einzigen Standard-`export` enthalten. +{% endhint %} + +
// 📁 message.js 
+const message = (name, age) => {
+    return `${name} is ${age} years old.`;
+};
+export default message;
+
+ +Je nach Exporttyp importieren wir auf zwei verschiedene Weisen. Benannte Exporte werden in geschweiften Klammern angegeben, während Standardexporte ohne Klammern importiert werden: + +```javascript +import { name, age } from "./person.js"; // Import eines benannten Exports +import message from "./message.js"; // Import eines Standardexports +``` + +Beim Zuweisen von Modulen sollte man *zirkuläre Abhängigkeiten* vermeiden. Eine zirkuläre Abhängigkeit entsteht, wenn Modul `A` von `B` abhängt und `B` wiederum direkt oder indirekt von `A` abhängig ist. diff --git a/de/regular-expression.md b/de/regular-expression.md new file mode 100644 index 00000000..0adc58d2 --- /dev/null +++ b/de/regular-expression.md @@ -0,0 +1,271 @@ +--- +layout: editorial +Kapitel: 14 +Seite: 89 +Beschreibung: Ein regulärer Ausdruck, oft als "RegEx" abgekürzt, ist ein leistungsstarkes Werkzeug zum Musterabgleich und zur Suche innerhalb von Zeichenfolgen. Es bietet eine prägnante und flexible Möglichkeit, Text basierend auf bestimmten Mustern zu durchsuchen, abzugleichen und zu manipulieren. +--- + +# Kapitel 14 +# Regulärer Ausdruck + +Ein regulärer Ausdruck ist ein Objekt, das entweder mit dem `RegExp`-Konstruktor erstellt werden kann oder als Literalwert, indem ein Muster in Schrägstriche `(/)` eingeschlossen wird. Die Syntaxen zum Erstellen eines regulären Ausdrucks sind unten gezeigt. + +```javascript +// Verwendung des regulären Ausdrucks-Konstruktors +new RegExp(pattern[, flags]); + +// Verwendung von Literalen +/pattern/flags +``` + +Die Flags sind optional beim Erstellen eines regulären Ausdrucks mit Literalen. Beispiel für die Erstellung eines identischen regulären Ausdrucks mit den oben genannten Methoden: + +```javascript +let re1 = new RegExp("xyz"); +let re2 = /xyz/; +``` + +Beide Methoden erzeugen ein Regex-Objekt und haben die gleichen Methoden und Eigenschaften. Es gibt Fälle, in denen wir dynamische Werte zum Erstellen eines regulären Ausdrucks benötigen – in diesem Fall funktionieren Literale nicht und wir müssen den Konstruktor verwenden. + +{% hint style="info" %} +In Fällen, in denen wir einen Schrägstrich als Teil eines regulären Ausdrucks haben möchten, müssen wir den Schrägstrich `(/)` mit einem Backslash `(\)` maskieren. +{% endhint %} + +Die verschiedenen Modifikatoren, die verwendet werden, um eine Groß-/Kleinschreibung-unabhängige Suche durchzuführen, sind: + +* `g` – globale Suche (findet alle Übereinstimmungen, anstatt nach der ersten Übereinstimmung zu stoppen) + +Beispiel : + +```javascript +const str = "Hello world, hello again!"; +const regex = /hello/gi; +const matches = str.match(regex); +// Wenn du über .match() nachdenkst, lies das hier 👇 +// Es ist eine eingebaute Methode in JavaScript, die verwendet wird, um eine Zeichenkette nach einem Ausdruck abzugleichen. Wenn eine Übereinstimmung gefunden wird, gibt sie ein Array aller gefundenen Übereinstimmungen zurück. +// Wenn nicht, gibt die .match()-Methode null zurück. + +console.log(matches); // ["Hello", "hello"] +``` + +* `i` – Suche ohne Beachtung der Groß-/Kleinschreibung + +Beispiel : + +```javascript +const str = "HeLlO WoRlD"; +const regex = /hello/i; +const match = regex.test(str); +// Die .test()-Methode gibt einen booleschen Wert zurück: +// true, wenn eine Übereinstimmung gefunden wird, und false, wenn nicht. + +console.log(match); // true +``` + +* `m` – mehrzeiliges Matching + +Beispiel : + +```javascript +const str = "This is a\nmultiline string."; +const regex = /./mg; +const matches = str.match(regex); +// Das m-Flag wird verwendet, um Zeilenumbrüche (\n) abzugleichen. +// Das bedeutet, dass der RegEx alle 26 Zeichen in der Zeichenkette abgleicht, +// einschließlich des Zeilenumbruchs. + +console.log(matches.length); // 26 +``` + +*Klammern* werden in einem regulären Ausdruck verwendet, um einen Zeichenbereich zu finden. Einige davon sind unten aufgeführt. + +* `[abc]` – findet jedes Zeichen zwischen den Klammern + +Beispiel : + +```javascript +const str = "The cat and the dog are both animals."; +const regex = /[abc]/g; +const matches = str.match(regex); + +console.log(matches); // Array aller Vorkommen von a, b und c + +[ + 'c', 'a', 'a', + 'a', 'b', 'a', + 'a' +] +``` + +* `[^abc]` – findet jedes Zeichen, das nicht zwischen den Klammern ist + +Beispiel : + +```javascript +const str = "The cat and dog."; +const regex = /[^abc]/g; // Findet jedes Zeichen, das nicht 'a', 'b' oder 'c' ist +const matches = str.match(regex); + +console.log(matches); // Array aller Vorkommen von Zeichen, die nicht 'a', 'b' oder 'c' sind + +[ + 'T', 'h', 'e', ' ', + 't', ' ', 'n', 'd', + ' ', 'd', 'o', 'g', + '.' +] + +``` + + + +* `[0-9]` – findet jede Ziffer zwischen den Klammern + +Beispiel : + +```javascript +const str = "The price of the item is $25, but it may change to $30."; +const regex = /[0-9]/g; // Findet jede Ziffer von 0 bis 9 +const matches = str.match(regex); + +console.log(matches); // Array aller Ziffernvorkommen + +[ + '2', '5', '3', '0' +] + +``` + +* `[^0-9]` – findet jedes Zeichen, das nicht zwischen den Klammern ist (keine Ziffer) + +Beispiel: + +```javascript +const str = "The price is $25."; +const regex = /[^0-9]/g; // Findet jedes Zeichen, das keine Ziffer ist +const matches = str.match(regex); + +console.log(matches); // Array aller Vorkommen von Nicht-Ziffern + +[ + 'T', 'h', 'e', ' ', + 'p', 'r', 'i', 'c', + 'e', ' ', 'i', 's', + ' ', '$', '.' +] + +``` + +*`(x|y)`– findet eines der Alternativen, getrennt durch ein `|` + +Beispiel: + +```javascript +const str = "The words 'xylophone' and 'yellow' contain the letters 'x' and 'y'."; +const regex = /(x|y)/g; // Findet entweder 'x' oder 'y' +const matches = str.match(regex); + +console.log(matches); // Array aller Vorkommen von 'x' oder 'y' + +[ + 'x', 'y', 'y', 'x', 'x', 'y' +] + +``` + +Metazeichen sind Sonderzeichen, die in regulären Ausdrücken eine besondere Bedeutung haben. Hier eine Übersicht: + +| Metazeichen | Beschreibung | +| ----------- | ---------------------------------------------------------------------- | +| `.` | Entspricht einem beliebigen Zeichen außer Zeilenumbruch oder Begrenzer | +| `\w` | Entspricht einem Wortzeichen (alphanumerisch: `[a-zA-Z0–9_]`) | +| `\W` | Entspricht einem Nicht-Wortzeichen (wie `[^a-zA-Z0–9_]`) | +| `\d` | Entspricht einer Ziffer (wie `[0-9]`) | +| `\D` | Entspricht einem Nicht-Ziffernzeichen | +| `\s` | Entspricht einem Leerzeichen (z. B. Space, Tab) | +| `\S` | Entspricht einem Nicht-Leerzeichen | +| `\b` | Entspricht dem Anfang oder Ende eines Wortes | +| `\B` | Entspricht **nicht** dem Anfang oder Ende eines Wortes | +| `\0` | Entspricht einem `NULL`-Zeichen | +| `\n` | Entspricht einem Zeilenumbruch | +| `\f` | Entspricht einem Form-Feed-Zeichen | +| `\r` | Entspricht einem Wagenrücklauf | +| `\t` | Entspricht einem Tabulator | +| `\v` | Entspricht einem vertikalen Tabulator | +| `\xxx` | Entspricht einem Zeichen im Oktal-Format `xxx` | +| `\xdd` | Entspricht einem Zeichen im Hexadezimal-Format `dd` | +| `\udddd` | Entspricht einem Unicode-Zeichen im Hexadezimalformat `dddd` | + +Eigenschaften und Methoden, die von RegEx unterstützt werden: + +| Name | Beschreibung | +| ------------- | --------------------------------------------------------------------- | +| `constructor` | Gibt die Funktion zurück, die den RegExp-Prototyp erstellt hat | +| `exec()` | Testet einen Treffer und gibt den ersten zurück (sonst `null`) | +| `global` | Prüft, ob das `g`-Modifikator gesetzt ist | +| `ignoreCase` | Prüft, ob das `i`-Modifikator gesetzt ist | +| `lastIndex` | Gibt den Index an, ab dem die nächste Suche beginnt | +| `multiline` | Prüft, ob das `m`-Modifikator gesetzt ist | +| `source` | Gibt den ursprünglichen Text des Musters zurück | +| `test()` | Testet, ob ein Treffer existiert, und gibt `true` oder `false` zurück | +| `toString()` | Gibt das Muster als Zeichenkette zurück | + +{% hint style="warning" %} +Eine `compile()` Methode zum Kompilieren eines regulären Ausdrucks ist veraltet. Sie war früher nützlich, um bestehende RegEx-Objekte neu zu konfigurieren, ist aber heute durch direktes Neuerstellen überflüssig. +{% endhint %} + +### Ein häufiges Beispiel für reguläre Ausdrücke + +```javascript +let text = "The best things in life are free"; +let result = /e/.exec(text); // sucht nach einem "e" in einem String +console.log(result); // Ausgabe: ["e", 2, "The best things in life ar...] + + +let helloWorldText = "Hello world!"; +// Suche nach "Hello" +let pattern1 = /Hello/g; +let result1 = pattern1.test(helloWorldText); +// result1: true + +let pattern1String = pattern1.toString(); +// pattern1String : '/Hello/g' +``` + +### Ein Praxisbeispiel: PLZ-Prüfung mit RegEx + +```javascript +const handleSubmit = (e) => { + // Verhindert das automatische Absenden des Formulars + e.preventDefault(); + + // Definiert eine Liste gültiger Postleitzahlen + const validPincodes = [ + 110001, 110002, 110003, 110004, 110005, 110006, 110007, 110008, 110009, + 110010, 110011, 110012, 110013, 110014, 110015, 110016, 110017, 110018, + 110019, 110020, 110021, 110022, 110023, 110050, 110051, 110056, 110048, + 110057, 110058, 110059, 110060, 110061, 110062, 110063, 110064 + ]; + + // Umwandlung der Postleitzahlen in Zeichenketten + const validPincodeStrings = validPincodes.map((pincode) => String(pincode)); + + // Erzeugt ein RegEx-Muster, das nur gültige PLZ zulässt + const regexPattern = new RegExp(`^(${validPincodeStrings.join("|")})$`); + + // Bekommt die PLZ vom Eingabefeld + const submittedPincode = pincode; // 'pincode' muss irgendwo definiert sein + + // Prüfung, ob die eingegebne PLZ ein gültiges Eingabemuster ist + if (regexPattern.test(submittedPincode)) { + // Erfolgsmeldung anzeigen + // ... + } else if (submittedPincode === "") { + // Fehlermeldung bei leerer Eingabe + // ... + } else if (submittedPincode.length < 6) { + // Fehlermeldung bei falscher Eingabelänge + // ... + } +} +``` diff --git a/de/resources.md b/de/resources.md new file mode 100644 index 00000000..52a040e1 --- /dev/null +++ b/de/resources.md @@ -0,0 +1,72 @@ +--- +Seite: V +Kapitel: +--- +# Lernressourcen + +## Artikel zum Erlernen von JavaScript + +1. Referenz zum Document Object Model [Link](https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model) + +2. Einführung in Events [Link](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events) + +3. Einführung in JavaScript von Hostinger [Link](https://www.hostinger.com/tutorials/what-is-javascript) + +4. Einführung in JavaScript von Microverse [Link](https://www.microverse.org/blog/introduction-to-javascript-a-guide-for-beginners) + +5. JavaScript-Grundlagen von Mozilla Developer [Link](https://developer.mozilla.org/en-US/docs/Learn/Getting_started_with_the_web/JavaScript_basics) + +6. JavaScript-Tutorial von Geeks for Geeks [Link](https://www.geeksforgeeks.org/javascript/) + +7. JavaScript-Tutorial von Stackify [Link](https://stackify.com/learn-javascript-tutorials/) + +8. JavaScript-Referenz zum HTML-DOM [Link](https://www.w3schools.com/js/js_htmldom.asp) + +9. Was ist das DOM? (CSS-Tricks) [Link](https://css-tricks.com/dom/) + +## Bücher zum Erlernen von JavaScript + + + +1. A Smarter Way to Learn JavaScript – Mark Myers [Link](https://www.amazon.in/Smarter-Way-Learn-JavaScript-technology-ebook/dp/B00H1W9I6C) + +2. Eloquent JavaScript – Marijn Haverbeke [Link](https://www.amazon.in/Eloquent-JavaScript-3rd-Introduction-Programming-ebook/dp/B07C96Q217) + +3. Head First JavaScript [Link](https://www.amazon.com/Head-First-JavaScript-Programming-Brain-Friendly/dp/144934013X?tag=javamysqlanta-20) + +4. JavaScript: The Good Parts – Douglas Crockford [Link](https://www.amazon.in/Javascript-Good-Parts-D-Crockford/dp/0596517742) + +5. Professional JavaScript for Web Developers [Link](https://www.amazon.com/dp/1118026691) + +6. Secrets of the JavaScript Ninja [Link](https://www.amazon.com/Secrets-JavaScript-Ninja-John-Resig/dp/193398869X?tag=javamysqlanta-20) + +7. The Principles of Object-Oriented JavaScript [Link](https://www.amazon.com/Principles-Object-Oriented-JavaScript-Nicholas-Zakas/dp/1593275404?tag=javamysqlanta-20) + +8. You Don’t Know JS – Kyle Simpson [Link](https://www.amazon.in/You-Dont-Know-Set-Volumes/dp/9352136268) + +## YouTube-Kanäle zum Lernen von JavaScript + +1. Academind – [Link](https://www.youtube.com/c/Academind) +2. Akshay Saini – [Link](https://www.youtube.com/@akshaymarch7) +3. Clever Programmer – [Link](https://www.youtube.com/@CleverProgrammer) +4. CodeWithHarry – [Link](https://www.youtube.com/c/CodeWithHarry) +5. Dave Gray – [Link](https://www.youtube.com/@DaveGrayTeachesCode) +6. freeCodeCamp – [Link](https://www.youtube.com/c/Freecodecamp) +7. JavaScript Mastery – [Link](https://www.youtube.com/@javascriptmastery) +8. SuperSimpleDev – [Link](https://www.youtube.com/@SuperSimpleDev) +9. The Net Ninja – [Link](https://www.youtube.com/channel/UCW5YeuERMmlnqo4oq8vwUpg) +10. thenewboston – [Link](https://www.youtube.com/@thenewboston) +11. Traversy Media – [Link](https://www.youtube.com/user/TechGuyWeb) + +## Projekte zum Üben + +- [Digitale Uhr](./beginner-projects/digital-clock.md) +- [Elektronisches Schlagzeug](./beginner-projects/electronic-drum-kit.md) +- [Bildersuche](./beginner-projects/image-search.md) +- [Monatskalender](./beginner-projects/monthly-calendar.md) +- [Zufällige Fotos](./beginner-projects/random-photos-generator.md) +- [Schere-Stein-Papier-Spiel](./beginner-projects/rock-paper-scissors-game.md) +- [Stoppuhr](./beginner-projects/simple-stopwatch.md) +- [Trinkgeldrechner](./beginner-projects/tip-calculator.md) +- [Video-Trailer-Popup](./beginner-projects/video-trailer-popup.md) +- [Wetter-App](./beginner-projects/weather-app.md)