JavaScript - The Complete Guide (Beginner + Advanced)
Modern JavaScript from the beginning - all the way up to JS expert level! THE must-have JavaScript resource in 2020.
Start courseJavaScript is THE most important programming language you need to learn as a web developer - and with this course, you make sure that you will not miss a single thing you have to know as a JavaScript developer!
This is the most comprehensive and modern course you can find on JavaScript - it's based on all my JavaScript knowledge AND teaching experience. It's both a complete guide, starting with the core basics of the language, as well as an extensive reference of the JavaScript language and environment, ensuring that both newcomers as well as experienced JavaScript developers get a lot out of this course!
It's a huge course because it's packed with important knowledge and helpful content. From the core basics, over advanced concepts and JavaScript specialties, all the way up to expert topics like performance optimization and testing - this course has it all. My goal was to create your go-to resource for the JavaScript language, which you can not just use for learning it but also as a resource you can come back to and look up important topics.
The course is based on my experience as a long-term JavaScript developer as well as a teacher with more than 1,000,000 students online. It's packed with examples, demos, projects, assignments, quizzes and of course videos - all with the goal of giving you the best possible way of learning JavaScript.
What's in the course?
This course is obviously packed with content - I therefore strongly recommend that you check out the full course curriculum to get a clear idea of all the topics covered in the course. In general, here's what you'll find in the course:
- Modern JavaScript from the start: The JavaScript syntax changed over time - in this course, you'll learn the latest syntax from the start (you'll also learn about the old one though, so that you can work in ANY JS project)
- ALL the Basics: Variables, constants, functions, how scripts are loaded etc
- Arrays & Objects: We'll explore these very important data structures in great detail
- Control Structures: Understand how to run code conditionally and in loops
- A look behind the Scenes: How JavaScript engines work behind the scenes and what that means for us
- Deep dives into Core Concepts: ALL the special things about JavaScript function, different syntaxes
- Working with the DOM: How to manipulate web pages dynamically via JavaScript (including deep dives and different use-cases)
- Events in JavaScript: Learn how to listen to a broad variety of events (e.g. drag & drop) and execute appropriate code
- Classes & Object-oriented Programming: Learn how to work with classes, prototypes, the "this" keyword, constructor functions and much more
- Asynchronous and Synchronous Programming: We'll explore callbacks, promises, async/ await and other important tools and language features to execute code correctly
- Http Requests: Learn how to send Http requests via JavaScript
- Tooling, Optimizations & Browser Support: Code splitting, producing small code and ensuring that scripts work in all browsers - this matters and hence is covered in great detail
- Libraries & Frameworks: Learn about libraries like Axios or frameworks like React.js - why they matter and how to use them
- Node.js: Whilst focusing on the browser-side for the majority of the course (because the syntax is the same), we'll also have a dedicated section on Node.js to learn all about that JS host environment
- Security & Performance Optimizations: Of course security matters, so does performance - no surprise that both is covered in the course!
- Automated Testing: Testing manually is hard work and can be unreliable - in this course you'll also get an introduction into automated testing
Who this course is for:
- Beginner web development students who have no or only little JavaScript experience
- Also developers who know the basics about JavaScript and want to deepen their knowledge
- Advanced JavaScript developers who want to learn more about the nitty-gritty details and dive into advanced concepts
- Everyone interested in learning JavaScript and all about how it works
Course content
Section 1Getting Started
- Introduction1:50
- What is JavaScript?3:44
- JavaScript in Action!8:57
- Join our Online Learning Community1:00
- How JavaScript Is Executed3:14
- Dynamic vs Weakly Typed Languages3:24
- JavaScript Runs In A Host Environment4:40
- Course Outline - What Is In The Course?6:00
- How To Get The Most Out Of This Course2:32
- Using Course Resources1:00
- JavaScript vs Java4:02
- A Brief History Of JavaScript6:03
- Setting Up a Development Environment11:12
- Course FAQs1:00
Section 2Basics: Variables, Data Types, Operators & Functions
- Module IntroductionPremium1:17
- Setting Up the ProjectPremium4:25
- More on Version Control & GitPremium1:00
- Adding JavaScript to the WebsitePremium6:42
- Introducing Variables & ConstantsPremium5:17
- Declaring & Defining VariablesPremium7:10
- Working with Variables & OperatorsPremium6:17
- Quiz 1: Variables & OperatorsPremium1:00
- Understanding the Starting CodePremium1:21
- Data Types: Numbers & Strings (Text)Premium6:00
- Using ConstantsPremium5:11
- More on StringsPremium15:51
- Quiz 2: Data Types & ConstantsPremium1:00
- Assignment - Variables, Constants, Operators & Core Data Types (Problem)Premium3:20
- Assignment - Variables, Constants, Operators & Core Data Types (Solution)Premium4:57
- Introducing FunctionsPremium5:50
- Adding A Custom FunctionPremium11:22
- Code Styles, Conventions & SyntaxPremium1:00
- Returning ValuesPremium4:31
- The (Un)Importance of Code OrderPremium4:34
- An Introduction to Global & Local ScopePremium5:31
- "Shadowed Variables"Premium1:00
- More about the "return" StatementPremium2:24
- Executing Functions "Indirectly"Premium11:10
- "Indirect" vs "Direct" Function Execution - SummaryPremium1:00
- Quiz 3: Functions & ScopePremium1:00
- Assignment - Functions (Problem)Premium2:37
- Assignment - Functions (Solution)Premium6:40
- Converting Data TypesPremium6:14
- Mixing Numbers & StringsPremium1:00
- Splitting Code into FunctionsPremium5:49
- Connecting all Buttons to FunctionsPremium7:43
- Working with Code CommentsPremium4:09
- More Operators!Premium6:39
- More Core Data Types!Premium4:31
- Using ArraysPremium8:53
- Creating ObjectsPremium6:02
- Accessing Object DataPremium2:51
- Quiz 4: Arrays & ObjectsPremium1:00
- Adding a Re-Usable Function That Uses ObjectsPremium5:24
- undefined, null & NaNPremium6:20
- The "typeof" OperatorPremium3:11
- Quiz 5: "undefined", "null" & "NaN"Premium1:00
- Importing Scripts Correctly with "defer" & "async"Premium12:57
- Wrap UpPremium2:13
- Useful Resources & LinksPremium1:00
Section 3Efficient Development & Debugging
- Module IntroductionPremium1:28
- Efficient Development & Debugging - An OverviewPremium3:18
- Configuring the IDE Look & FeelPremium2:25
- Using ShortcutsPremium4:12
- Working with Auto-Completion & IDE HintsPremium4:34
- Installing IDE ExtensionsPremium2:04
- Tweaking Editor SettingsPremium2:15
- Utilizing Different IDE ViewsPremium1:41
- Finding Help & Working with MDNPremium5:53
- The ECMAScript StandardPremium1:00
- How to "google" CorrectlyPremium1:44
- Debugging JavaScript - An OverviewPremium3:17
- An Error Message! No Reason To Panic!Premium4:26
- Using console.log() to look "into the Code"Premium3:49
- Next-Level Debugging with the Chrome Devtools & BreakpointsPremium8:20
- Testing Code Changes Directly in the DevtoolsPremium2:05
- Debugging Code directly Inside VS CodePremium4:55
- Wrap UpPremium1:22
- Useful Resources & LinksPremium1:00
Section 4Working with Control Structures (if Statements, Loops, Error Handling)
- Module IntroductionPremium2:26
- Introducing "if" Statements & Boolean (Comparison) OperatorsPremium9:26
- Using "if" StatementsPremium7:23
- Working with "if", "else" and "else-if"Premium5:10
- Beware When Comparing Objects & Arrays for Equality!Premium4:06
- The Logical AND and OR OperatorsPremium9:10
- Understanding Operator PrecedencePremium7:20
- Quiz 6: if & Boolean Operators - The BasicsPremium1:00
- Beyond true/ false: "Truthy" and "Falsy" ValuesPremium7:30
- Coercion vs ConversionPremium1:00
- Quiz 7: Falsy and Truthy ValuesPremium1:00
- Setting Up a Bigger Example Project (The "Monster Killer")Premium2:59
- Adding an "Attack" FunctionPremium7:57
- Using "if" Statements for Checking the Win-ConditionPremium9:17
- Adding More "if" Statements & A "Strong Attack" FunctionalityPremium7:41
- Time for a "Heal Player" Functionality!Premium10:15
- Controlling the Conditional Bonus Life (Without Boolean Operators!)Premium5:59
- Adding a "Reset Game" FunctionalityPremium6:00
- Validating User InputPremium6:17
- Utilizing Global Constants as Identifiers in Conditional CodePremium3:20
- Adding a Conditional Battle LogPremium16:37
- Introducing the Ternary OperatorPremium7:31
- A Bit of Theory: Statements vs ExpressionsPremium1:40
- Logical Operator "Tricks" & ShorthandsPremium12:58
- Quiz 8: Logical Operators & How They WorkPremium1:00
- Working with the "switch-case" StatementPremium7:10
- Introducing LoopsPremium6:40
- The "for" LoopPremium7:38
- The "for-of" LoopPremium5:16
- The "for-in" LoopPremium6:49
- The "while" & "do-while" LoopsPremium8:00
- Quiz 9: Loops - BasicsPremium1:00
- Assignment - Control Structures (Problem)Premium2:47
- Assignment - Control Structures (Solution)Premium9:55
- Controlling Loops with "break"Premium8:11
- Controlling Iterations with "continue"Premium2:21
- More Control with Labeled StatementsPremium6:26
- Quiz 10: break & continuePremium1:00
- Error Handling with "try-catch" - An IntroductionPremium2:25
- Throwing Custom ErrorsPremium5:16
- Working with "try-catch" to Catch & Handle ErrorsPremium8:14
- Quiz 11: Error HandlingPremium1:00
- Wrap UpPremium3:21
- Useful Resources & LinksPremium1:00
Section 5Behind the Scenes & The (Weird) Past (ES3, ES5) & Present (ES6+) of JavaScript
- Module IntroductionPremium1:43
- ES5 vs ES6+ ("Next Gen JS") - Evolution of JavaScriptPremium8:14
- var vs let & const - Introducing "Block Scope"Premium14:32
- Understanding "Hoisting"Premium4:07
- Strict Mode & Writing Good CodePremium5:46
- Quiz 12: "JavaScript Specialties"Premium1:00
- How Code is Parsed & CompiledPremium8:16
- Inside the JavaScript Engine - How the Code ExecutesPremium15:59
- [DEEP DIVE] JavaScript Language vs Browser APIsPremium1:00
- Primitive vs Reference ValuesPremium19:24
- Garbage Collection & Memory ManagementPremium12:00
- Wrap UpPremium1:55
- Useful Resources & LinksPremium1:00
Section 6More on Functions
- Module IntroductionPremium1:31
- Recapping Functions Knowledge - What We Know Thus FarPremium1:52
- Parameters vs ArgumentsPremium1:00
- Functions vs MethodsPremium5:46
- Functions are Objects!Premium2:47
- Function Expressions: Storing Functions in VariablesPremium5:12
- Function Expressions vs Function DeclarationsPremium2:47
- Anonymous FunctionsPremium5:54
- Working on the Project: Adding User Choices to the GamePremium7:44
- Implementing the Core Game LogicPremium7:20
- Introducing Arrow FunctionsPremium8:41
- Quiz 13: Creating FunctionsPremium1:00
- Outputting Messages to the UserPremium3:53
- Default Arguments in FunctionsPremium10:45
- Introducing Rest Parameters ("Rest Operator")Premium8:57
- Creating Functions Inside of FunctionsPremium3:04
- Understanding Callback FunctionsPremium6:09
- Assignment - Functions (Problem)Premium3:16
- Assignment - Functions (Solution)Premium8:19
- Working with "bind()"Premium8:39
- Adding bind() to the Calculator ProjectPremium3:46
- Quiz 14: Functions - AdvancedPremium1:00
- call() and apply()Premium1:18
- Wrap UpPremium2:10
- Useful Resources & LinksPremium1:00
Section 7Working with the DOM (Browser HTML Code) in JavaScript
- Module IntroductionPremium1:48
- What's the "DOM"?Premium6:00
- Document and Window ObjectPremium6:20
- Understanding the DOM and how it's createdPremium7:07
- Nodes & Elements - Querying the DOM OverviewPremium5:55
- Selecting Elements in the DOMPremium9:54
- Summary: Node Query MethodsPremium1:00
- Exploring and Changing DOM PropertiesPremium7:37
- Attributes vs PropertiesPremium8:58
- Selecting Multiple Elements & SummaryPremium5:13
- Quiz 15: DOM BasicsPremium1:00
- Assignment - DOM Querying (Problem)Premium2:10
- Assignment - DOM Querying (Solution)Premium5:41
- Traversing the DOM - OverviewPremium6:22
- Traversing Child NodesPremium9:15
- Using parentNode & parentElementPremium5:01
- Selecting Sibling ElementsPremium4:05
- DOM Traversal vs Query MethodsPremium4:35
- Styling DOM ElementsPremium12:18
- Creating Elements with JS - OverviewPremium2:42
- Adding Elements via HTML in CodePremium7:42
- Adding Elements via createElement()Premium5:42
- Inserting DOM ElementsPremium8:15
- Cloning DOM NodesPremium1:45
- Live Node Lists vs Static Node ListsPremium4:55
- Removing ElementsPremium1:56
- Insertion & Removal Method SummaryPremium2:38
- Summary: Insert, Replace, RemovePremium1:00
- Setting Up the Practice ProjectPremium2:16
- Selecting the Modal and "Add" ButtonPremium8:58
- Opening a Modal by Changing CSS ClassesPremium5:01
- Controlling the BackdropPremium8:04
- Fetching and Validating User InputPremium8:06
- Creating a Movie in JavaScript & Clearing the InputPremium4:00
- Rendering Movie Items on the ScreenPremium8:23
- Deleting Movie ElementsPremium9:12
- Showing & Hiding the "Are you sure?" DialogPremium7:08
- Starting with the Confirmation LogicPremium4:29
- Finishing the AppPremium11:45
- Wrap UpPremium1:55
- Useful Resources & LinksPremium1:00
Section 8More on Arrays & Iterables
- Module IntroductionPremium1:08
- What are "Iterables" and "Array-like Objects"?Premium2:11
- Creating ArraysPremium8:55
- Which Data Can You Store In Arrays?Premium3:47
- push(), pop(), unshift(), shift() - Adding & Removing ElementsPremium6:59
- The splice() MethodPremium5:37
- Selecting Ranges & Creating Copies with slice()Premium4:26
- arrays-it-08-concatPremium2:23
- Retrieving Indexes with indexOf() /& lastIndexOf()Premium3:47
- Finding Stuff: find() and findIndex()Premium5:20
- Is it Included?Premium1:20
- Alternative to for Loops: The forEach() MethodPremium4:24
- Transforming Data with map()Premium2:38
- sort()ing and reverse()ingPremium4:15
- Filtering Arrays with filter()Premium2:35
- Where Arrow Functions Shine!Premium1:31
- The Important reduce() MethodPremium7:33
- Chaining Methods in JavaScriptPremium1:00
- Arrays & Strings - split() and join()Premium4:21
- The Spread Operator (...)Premium10:31
- Understanding Array DestructuringPremium4:24
- Maps & Sets - OverviewPremium4:16
- Working with SetsPremium7:20
- Working with MapsPremium9:30
- Maps vs ObjectsPremium3:41
- Understanding WeakSetPremium4:50
- Understanding WeakMapPremium2:51
- Assignment - Arrays & Iterables (Problem)Premium3:05
- Assignment - Arrays & Iterables (Solution)Premium10:55
- Wrap UpPremium1:25
- Useful Resources & LinksPremium1:00
Section 9More on Objects
- Module IntroductionPremium1:38
- What's an Object?Premium5:54
- Objects - RecapPremium2:42
- Adding, Modifying & Deleting PropertiesPremium6:46
- Special Key Names & Square Bracket Property AccessPremium8:36
- Property Types & Property OrderPremium3:55
- Dynamic Property Access & Setting Properties DynamicallyPremium4:11
- Quiz 16: Object PropertiesPremium1:00
- Demo App & Shorthand Property SyntaxPremium9:22
- Rendering Elements based on ObjectsPremium5:36
- for-in Loops & Outputting Dynamic PropertiesPremium5:24
- Adding the Filter FunctionalityPremium5:38
- Understanding "Chaining" (Property & Method Chaining)Premium1:51
- The Object Spread Operator (...)Premium5:54
- Understanding Object.assign()Premium2:08
- Object DestructuringPremium6:13
- Checking for Property ExistancePremium2:42
- Introducing "this"Premium5:52
- The Method Shorthand SyntaxPremium1:07
- The "this" Keyword And Its Strange BehaviorPremium5:41
- call() and apply()Premium3:22
- What the Browser (Sometimes) Does to "this"Premium3:32
- "this" and Arrow FunctionsPremium10:36
- Quiz 17: "this"Premium1:00
- Getters & SettersPremium7:05
- Wrap UpPremium1:33
- Useful Resources & LinksPremium1:00
Section 10Classes & Object-oriented Programming (OOP)
- Module IntroductionPremium1:55
- What is "Object-oriented Programming" (OOP)?Premium3:17
- Getting Started with OOP CodePremium12:10
- Defining & Using a First ClassPremium7:17
- Working with Constructor MethodsPremium4:51
- Fields vs PropertiesPremium2:19
- Using & "Connecting" Multiple ClassesPremium9:06
- Binding Class Methods & Working with "this"Premium4:57
- Adding a Cart and Shop ClassPremium4:37
- Communicating Can Be Challenging!Premium3:54
- Static Methods & PropertiesPremium4:31
- First Summary & Classes vs Object LiteralsPremium4:06
- Getters & SettersPremium5:43
- Introducing InheritancePremium2:34
- Implementing InheritancePremium11:50
- Using Inheritance EverywherePremium6:51
- Overriding Methods and the super() ConstructorPremium6:00
- super() Constructor Execution, Order & "this"Premium6:46
- Different Ways of Adding MethodsPremium5:51
- Private PropertiesPremium7:24
- Assignment - Classes & OOP (Problem)Premium2:39
- Assignment - Classes & OOP (Solution)Premium13:36
- The "instanceof" OperatorPremium4:30
- Understanding Object DescriptorsPremium7:35
- Built-in ClassesPremium1:09
- Quiz 18: ClassesPremium1:00
- Wrap UpPremium1:51
- Useful Resources & LinksPremium1:00
Section 11Deep Dive: Constructor Functions & Prototypes
- Module IntroductionPremium1:34
- Introducing Constructor FunctionsPremium4:02
- Constructor Functions vs Classes & Understanding "new"Premium4:17
- Introducing PrototypesPremium16:46
- Working with PrototypesPremium5:19
- The Prototype Chain and the Global "Object"Premium8:26
- Quiz 19: Constructor Functions & PrototypesPremium1:00
- Classes & PrototypesPremium5:24
- Methods in Classes & In ConstructorsPremium10:16
- Built-in Prototypes in JavaScriptPremium2:12
- Setting & Getting PrototypesPremium10:58
- Wrap UpPremium2:49
- Useful Resources & LinksPremium1:00
Section 12Practice: OOP & Classes
- Module IntroductionPremium1:38
- First Project Steps & PlanningPremium4:46
- Creating Project Lists & Parsing Element DataPremium4:08
- Starting with the "Switch Project" LogicPremium9:59
- Passing Method References AroundPremium7:02
- Moving DOM ElementsPremium11:49
- Adding a TooltipPremium8:58
- Adding InheritancePremium6:13
- Wrap UpPremium0:57
- Useful Resources & LinksPremium1:00
Section 13Back to the DOM & More Browser APIs
- Module IntroductionPremium2:31
- Using "dataset" (data-* Attributes)Premium6:51
- Getting Element Box DimensionsPremium5:53
- Working with Element Sizes & PositionsPremium4:56
- The DOM & PrototypesPremium2:21
- Positioning the TooltipPremium10:57
- Handling ScrollingPremium5:36
- Working with TagsPremium5:14
- Loading Scripts DynamicallyPremium7:35
- Setting Timers & IntervalsPremium7:37
- The "location" and "history" ObjectsPremium4:20
- The "navigator" ObjectPremium4:50
- Working with DatesPremium3:17
- The "Error" Object & Constructor FunctionPremium3:21
- Wrap UpPremium0:43
- Useful Resources & LinksPremium1:00
Section 14Working with Events
- Module IntroductionPremium1:31
- Introduction to Events in JavaScriptPremium6:18
- Different Ways of Listening to EventsPremium6:59
- Removing Event ListenersPremium5:13
- The "event" ObjectPremium5:43
- Supported Event TypesPremium8:00
- Working with "preventDefault()"Premium5:15
- Understanding "Capturing" & "Bubbling" PhasesPremium2:02
- Event Propagation & "stopPropagation()"Premium7:39
- Using Event DelegationPremium8:33
- Triggering DOM Elements ProgrammaticallyPremium3:40
- Event Handler Functions & "this"Premium2:28
- Quiz 20: EventsPremium1:00
- Drag & Drop - TheoryPremium4:58
- Configuring Draggable ElementsPremium6:23
- Marking the "Drop Area"Premium8:52
- Dropping & Moving Data + ElementsPremium6:58
- Firefox AdjustmentsPremium1:00
- Wrap UpPremium1:15
- Useful Resources & LinksPremium1:00
Section 15Advanced Function Concepts
- Module IntroductionPremium0:57
- Pure Functions & Side-EffectsPremium6:13
- Impure vs Pure FunctionsPremium2:00
- Factory FunctionsPremium5:41
- ClosuresPremium7:45
- Closures in PracticePremium7:01
- Closures & Memory ManagementPremium1:23
- Optional: IIFEsPremium1:00
- Introducing "Recursion"Premium7:32
- Advanced RecursionPremium9:01
- Quiz 21: Advanced FunctionsPremium1:00
- Wrap UpPremium1:14
- Useful Resources & LinksPremium1:00
Section 16More on Numbers & Strings
- Module IntroductionPremium0:53
- How Numbers Work & Behave in JavaScriptPremium7:46
- Floating Point (Im)PrecisionPremium11:04
- The BigInt TypePremium3:36
- The Global "Number" and "Math" ObjectsPremium2:47
- Example: Generate Random Number Between Min/ MaxPremium5:33
- Exploring String MethodsPremium1:43
- Tagged TemplatesPremium10:28
- Introducing Regular Expressions ("RegEx")Premium4:30
- More on Regular ExpressionsPremium7:25
- Wrap UpPremium1:20
- Useful Resources & LinksPremium1:00
Section 17Async JavaScript: Promises & Callbacks
- Module IntroductionPremium1:12
- Understanding Synchronous Code Execution ("Sync Code")Premium2:51
- Understanding Asynchronous Code Execution ("Async Code")Premium5:44
- Blocking Code & The "Event Loop"Premium10:30
- Sync + Async Code - The Execution OrderPremium4:03
- Multiple Callbacks & setTimeout(0)Premium3:20
- Quiz 22: Asynchronous CodePremium1:00
- Getting Started with PromisesPremium8:25
- Chaining Multiple PromisesPremium5:52
- Promise Error HandlingPremium7:46
- Async/ awaitPremium9:11
- Async/ await & Error HandlingPremium3:07
- Async/ await vs "Raw Promises"Premium4:56
- Promise.all(), Promise.race() etc.Premium7:59
- Quiz 23: Promises & async/ awaitPremium1:00
- Wrap UpPremium1:27
- Useful Resources & LinksPremium1:00
Section 18Working with Http Requests
- Module IntroductionPremium1:06
- What & WhyPremium5:03
- More Background about HttpPremium5:24
- Getting Started with HttpPremium3:35
- Sending a GET RequestPremium3:46
- JSON Data & Parsing DataPremium9:14
- Promisifying Http Requests (with XMLHttpRequest)Premium3:49
- Sending Data with a POST RequestPremium4:55
- Triggering Requests via the UIPremium3:12
- Sending a DELETE RequestPremium4:56
- Handling ErrorsPremium5:03
- Using the fetch() APIPremium7:10
- POSTing Data with the fetch() APIPremium2:38
- Adding Request HeadersPremium3:01
- fetch() & Error HandlingPremium7:11
- XMLHttpRequest vs fetch()Premium1:42
- Working with FormDataPremium6:58
- Wrap UpPremium1:17
- Useful Resources & LinksPremium1:00
Section 19Working with JavaScript Libraries
- Module IntroductionPremium0:59
- What & WhyPremium2:55
- Adding Libraries (Example: lodash)Premium9:10
- Example: jQueryPremium2:30
- Discovering LibrariesPremium3:25
- Axios Library & Http RequestsPremium10:46
- Third-Party Library ConsiderationsPremium4:54
- Wrap UpPremium0:59
- Useful Resources & LinksPremium1:00
Section 20Modular JavaScript (Working with Modules)
- Module IntroductionPremium0:56
- Splitting Code in a Sub-optimal WayPremium7:12
- A First Step Towards JavaScript ModulesPremium3:25
- We Need a Development Server!Premium5:58
- First import / export WorkPremium3:41
- Switching All Files To Use ModulesPremium4:26
- More Named Export Syntax VariationsPremium6:12
- Working With Default ExportsPremium3:35
- Dynamic Imports & Code SplittingPremium5:24
- When Does Module Code Execute?Premium2:06
- Module Scope & globalThisPremium6:18
- Quiz 24: ModulesPremium1:00
- Wrap UpPremium1:37
- Useful Resources & LinksPremium1:00
Section 21JavaScript Tooling & Workflows
- Module IntroductionPremium3:23
- Project Limitations & Why We Need ToolsPremium8:11
- Workflow OverviewPremium2:42
- Setting Up a npm ProjectPremium3:45
- Working with npm PackagesPremium3:39
- Linting with ESLintPremium8:38
- Bundling with WebpackPremium15:13
- Bonus: Multiple Entry PointsPremium1:00
- Development Mode & Fixing "Lazy Loading"Premium4:00
- Using webpack-dev-serverPremium3:14
- Generating SourcemapsPremium3:05
- Building For ProductionPremium3:45
- Final OptimizationsPremium6:35
- Using Third Party Packages with npm & WebpackPremium4:06
- Wrap UpPremium1:39
- Useful Resources & LinksPremium1:00
Section 22Utilizing Browser Storage
- Module IntroductionPremium1:05
- Browser Storage OptionsPremium7:21
- localStorage & sessionStoragePremium10:43
- Getting Started with CookiesPremium6:06
- Working with CookiesPremium8:10
- Getting Started with IndexedDBPremium8:55
- Working with IndexedDBPremium4:06
- Wrap UpPremium0:48
- Useful Resources & LinksPremium1:00
Section 23JavaScript & Browser Support
- Module IntroductionPremium1:29
- What Is "Browser Support" About?Premium7:36
- Determining Browser Support For A JavaScript FeaturePremium8:20
- Determining Required SupportPremium3:29
- Solution: Feature Detection + Fallback CodePremium9:55
- Solution: Using PolyfillsPremium3:18
- Solution: Transpiling CodePremium12:01
- Improvement: Automatically Detect + Add PolyfillsPremium11:02
- What about Support Outside of Browsers?Premium0:57
- Browser Support Outside of JavaScript FilesPremium2:36
- Wrap UpPremium1:18
- Useful Resources & LinksPremium1:00
Section 24Time to Practice: Share My Place App
- Module IntroductionPremium0:53
- Setting Up the ProjectPremium3:05
- Getting DOM AccessPremium4:33
- Getting the User LocationPremium6:27
- Adding Feedback (Showing a Modal)Premium11:16
- Hiding the ModalPremium2:38
- Rendering a Map with Google MapsPremium14:16
- Continuing without a Credit CardPremium1:00
- Finding an Address & Getting the CoordinatesPremium8:22
- Converting User Input to CoordinatesPremium3:35
- Creating a "Share Place" LinkPremium8:30
- Copying the Link to the ClipboardPremium3:36
- Rendering the "Shared Place" ScreenPremium6:22
- Useful Resources & LinksPremium1:00
Section 25Working with JavaScript Frameworks
- Module IntroductionPremium1:06
- What and Why?Premium7:35
- The Idea Behind React.jsPremium2:46
- Analysing a React ProjectPremium17:38
- Wrap UpPremium1:35
- Useful Resources & LinksPremium1:00
Section 26Meta-Programming: Symbols, Iterators, Generators, Reflect API & Proxy API
- Module IntroductionPremium1:51
- Understanding SymbolsPremium8:27
- Well-known SymbolsPremium5:15
- Understanding IteratorsPremium5:32
- Generators & Iterable ObjectsPremium11:02
- Generators Summary & Built-in Iterables ExamplesPremium3:21
- The Reflect APIPremium7:10
- The Proxy API and a First "Trap"Premium9:04
- Working with Proxy TrapsPremium2:57
- Wrap UpPremium1:37
- Useful Resources & LinksPremium1:00
Section 27Node.js: An Introduction
- Module IntroductionPremium1:42
- JavaScript is a Hosted LanguagePremium2:21
- Installation & BasicsPremium6:16
- Understanding Modules & File AccessPremium4:39
- Working with Incoming Http RequestsPremium5:46
- Sending Responses (HTML Data)Premium4:01
- Parsing Incoming DataPremium10:53
- Introducing & Installing Express.jsPremium2:48
- Express.js: The BasicsPremium6:33
- Extracting DataPremium4:23
- Rendering Server-side HTML with Templates & EJSPremium6:52
- Enhancing Our ProjectPremium3:44
- Adding Basic REST RoutesPremium12:09
- Understanding CORS (Cross Origin Resource Sharing)Premium5:13
- Sending the Location ID to the FrontendPremium2:16
- Adding the GET Location RoutePremium7:16
- Introducing MongoDB (Database)Premium14:44
- NodeJS Error HandlingPremium1:00
- Wrap UpPremium1:50
- Useful Resources & LinksPremium1:00
Section 28Security
- Module IntroductionPremium1:35
- Security Hole Overview & Exposing Data in your CodePremium6:45
- Cross-Site Scripting Attacks (XSS)Premium14:39
- Third-Party Libraries & XSSPremium5:17
- Quiz 25: XSS & Exposing Confidential DetailsPremium1:00
- CSRF Attacks (Cross Site Request Forgery)Premium4:16
- CORS (Cross Origin Resource Sharing)Premium2:53
- Wrap UpPremium1:30
- Useful Resources & LinksPremium1:00
Section 29Deploying JavaScript Code
- Module IntroductionPremium1:11
- Deployment StepsPremium7:29
- Different Types of WebsitesPremium1:00
- Example: Static Host Deployment (no Server-side Code)Premium9:43
- Injecting Script Imports Into HTML AutomaticallyPremium1:00
- Example: Dynamic Page Deployment (with Server-side Code)Premium12:45
- Useful Resources & LinksPremium1:00
Section 30Performance & Optimizations
- Module IntroductionPremium1:49
- What is "Performance Optimization" About?Premium6:16
- Optimization PotentialsPremium6:48
- Measuring PerformancePremium3:42
- Diving Into The Browser Devtools (for Performance Measuring)Premium15:30
- Further ResourcesPremium2:13
- Preparing The Testing SetupPremium4:03
- Optimizing Startup Time & Code Usage / CoveragePremium11:51
- Updating The DOM CorrectlyPremium9:53
- Updating Lists CorrectlyPremium8:11
- Optimizing The Small ThingsPremium3:58
- Micro-Optimizations (Think Twice!)Premium8:49
- Finding & Fixing Memory LeaksPremium9:43
- Server-side Performance OptimizationsPremium1:00
- Wrap UpPremium3:26
- Useful Resources & LinksPremium1:00
Section 31Introduction to Testing
- Module IntroductionPremium0:49
- What Is Testing? Why Does It Matter?Premium7:09
- Testing SetupPremium4:10
- Writing & Running Unit TestsPremium11:15
- Writing & Running Integration TestsPremium6:03
- Writing & Running e2e TestsPremium10:16
- Dealing with Async CodePremium10:20
- Working with MocksPremium7:51
- Useful Resources & LinksPremium1:00
Section 32Bonus: Programming Paradigms (Procedural vs Object Oriented vs Functional)
- Module IntroductionPremium0:48
- What are Programming Paradigms?Premium3:01
- Procedural Programming in PracticePremium8:53
- Object Oriented Programming in PracticePremium13:20
- Functional Programming in PracticePremium13:52
- Wrap UpPremium3:26
- Useful Resources & LinksPremium1:00
Section 33Bonus: Data Structures & Algorithms Introduction
- Module IntroductionPremium2:02
- What are "Data Structures" & "Algorithms"?Premium4:22
- A First ExamplePremium10:22
- Solving the Same Problem DifferentlyPremium7:26
- Performance & The "Big O" NotationPremium11:44
- More Time Complexities & Comparing AlgorithmsPremium3:35
- More on Big OPremium5:23
- More ExamplesPremium10:15
- Diving into Data Structures & Time ComplexitiesPremium12:07
- Where to Learn More & Wrap UpPremium3:22
- Useful Resources & LinksPremium1:00
Section 34Bonus: TypeScript Introduction
- Module IntroductionPremium1:09
- What is TypeScript and Why would you use it?Premium4:51
- Working with TypesPremium10:05
- Core Types & Diving DeeperPremium17:26
- Object Types, Array Types & Function TypesPremium9:22
- Advanced Types (Literal Types, Union Types, Enums)Premium9:20
- Classes & InterfacesPremium12:02
- Generic TypesPremium5:02
- Configuring the TypeScript CompilerPremium5:11
- Wrap UpPremium1:31
- Useful Resources & LinksPremium1:00
Section 35Bonus: Web Components
- Module IntroductionPremium1:59
- Web Components in ActionPremium6:30
- What are Web Components?Premium3:22
- Why Web Components?Premium2:44
- Getting Started!Premium4:56
- Web Component Browser SupportPremium2:44
- Our Development SetupPremium3:53
- A First Custom ElementPremium8:16
- Interacting with the Surrounding DOMPremium5:04
- Understanding the Custom Element LifecyclePremium2:51
- Using "connectedCallback" for DOM AccessPremium2:05
- Listening to Events Inside the ComponentPremium9:12
- Using Attributes on Custom ElementsPremium4:45
- Styling our ElementsPremium4:08
- Working with the "Shadow DOM"Premium5:00
- Adding an HTML TemplatePremium5:40
- Using SlotsPremium1:50
- Defining the Template in JavaScriptPremium3:21
- Using Style Tags in the Shadow DOMPremium2:40
- Extending Built-in ElementsPremium7:33
- Assignment - The Basics (Problem)Premium2:55
- Assignment - The Basics (Solution)Premium11:31
- The Next StepsPremium0:49
- Understanding Shadow DOM ProjectionPremium2:26
- Styling "slot" Content Outside of the Shadow DOMPremium3:44
- Styling "slot" Content Inside of the Shadow DOMPremium3:10
- Styling the Host ComponentPremium4:42
- Conditional Host StylingPremium2:49
- Styling with the Host Content in MindPremium2:27
- Smart Dynamic Styling with CSS VariablesPremium6:20
- Cleaning Up the Overall StylingPremium3:22
- Observing Attribute ChangesPremium6:17
- Adjusting the Component Behavior Upon Attribute ChangesPremium2:34
- Using "disconnectedCallback"Premium6:10
- Adding a render() MethodPremium6:13
- Final AdjustmentPremium1:00
- The Next StepsPremium0:52
- Creating the Basic Modal ComponentPremium6:33
- Adding the Modal ContainerPremium2:29
- Styling the Modal ElementsPremium5:35
- Adding Some General App LogicPremium3:49
- Opening the Modal via CSSPremium5:23
- Public Methods & PropertiesPremium6:37
- Understanding Named SlotsPremium5:45
- Listening to Slot Content ChangesPremium5:10
- Closing the ModalPremium6:57
- Dispatching Custom EventsPremium3:40
- Configuring Custom EventsPremium4:52
- Finishing it up!Premium4:50
- Useful Resources & LinksPremium1:00
Section 36Roundup & Next Steps
- Congratulations!Premium6:09
Course instructor
Maximilian Schwarzmüller
As a self-taught professional I really know the hard parts and the difficult topics when learning new or improving on already-known languages. This background and experience enable me to focus on the most relevant key concepts and topics. My track record of many 5-star rated courses, more than 1,000,000 students worldwide as well as a successful YouTube channel is the best proof for that.
The most rewarding experience for me is to see how people find new, better jobs, build awesome web applications, work on amazing projects or simply enjoy their hobby with the help of my content. That's why, together with Manuel Lorenz, I founded Academind to offer the best possible learning experience and to share the pleasure of learning with our students.