JavaScript - The Complete Guide 2020 (Beginner + Advanced)

Modern JavaScript from the beginning - all the way up to JS expert level! THE must-have JavaScript resource in 2020.

Start

JavaScript 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

Section: Getting Started

1. Introduction (1:50) Preview
2. What is JavaScript? (3:44) Preview
3. JavaScript in Action! (8:57) Preview
4. Join our Online Learning Community (1:00) Preview
5. How JavaScript Is Executed (3:14) Preview
6. Dynamic vs Weakly Typed Languages (3:24) Preview
7. JavaScript Runs In A Host Environment (4:40) Preview
8. Course Outline - What Is In The Course? (6:00) Preview
9. How To Get The Most Out Of This Course (2:32) Preview
10. Using Course Resources (1:00) Preview
11. JavaScript vs Java (4:02) Preview
12. A Brief History Of JavaScript (6:03) Preview
13. Setting Up a Development Environment (11:12) Preview
14. Course FAQs (1:00) Preview

Section: Basics: Variables, Data Types, Operators & Functions

15. Module Introduction (1:17) Start
16. Setting Up the Project (4:25) Start
17. More on Version Control & Git (1:00) Start
18. Adding JavaScript to the Website (6:42) Start
19. Introducing Variables & Constants (5:17) Start
20. Declaring & Defining Variables (7:10) Start
21. Working with Variables & Operators (6:17) Start
22. Quiz 1: Variables & Operators (1:00) Start
23. Understanding the Starting Code (1:21) Start
24. Data Types: Numbers & Strings (Text) (6:00) Start
25. Using Constants (5:11) Start
26. More on Strings (15:51) Start
27. Quiz 2: Data Types & Constants (1:00) Start
28. Assignment - Variables, Constants, Operators & Core Data Types (Problem) (3:20) Start
29. Assignment - Variables, Constants, Operators & Core Data Types (Solution) (4:57) Start
30. Introducing Functions (5:50) Start
31. Adding A Custom Function (11:22) Start
32. Code Styles, Conventions & Syntax (1:00) Start
33. Returning Values (4:31) Start
34. The (Un)Importance of Code Order (4:34) Start
35. An Introduction to Global & Local Scope (5:31) Start
36. "Shadowed Variables" (1:00) Start
37. More about the "return" Statement (2:24) Start
38. Executing Functions "Indirectly" (11:10) Start
39. "Indirect" vs "Direct" Function Execution - Summary (1:00) Start
40. Quiz 3: Functions & Scope (1:00) Start
41. Assignment - Functions (Problem) (2:37) Start
42. Assignment - Functions (Solution) (6:40) Start
43. Converting Data Types (6:14) Start
44. Mixing Numbers & Strings (1:00) Start
45. Splitting Code into Functions (5:49) Start
46. Connecting all Buttons to Functions (7:43) Start
47. Working with Code Comments (4:09) Start
48. More Operators! (6:39) Start
49. More Core Data Types! (4:31) Start
50. Using Arrays (8:53) Start
51. Creating Objects (6:02) Start
52. Accessing Object Data (2:51) Start
53. Quiz 4: Arrays & Objects (1:00) Start
54. Adding a Re-Usable Function That Uses Objects (5:24) Start
55. undefined, null & NaN (6:20) Start
56. The "typeof" Operator (3:11) Start
57. Quiz 5: "undefined", "null" & "NaN" (1:00) Start
58. Importing Scripts Correctly with "defer" & "async" (12:57) Start
59. Wrap Up (2:13) Start
60. Useful Resources & Links (1:00) Start

Section: Efficient Development & Debugging

61. Module Introduction (1:28) Start
62. Efficient Development & Debugging - An Overview (3:18) Start
63. Configuring the IDE Look & Feel (2:25) Start
64. Using Shortcuts (4:12) Start
65. Working with Auto-Completion & IDE Hints (4:34) Start
66. Installing IDE Extensions (2:04) Start
67. Tweaking Editor Settings (2:15) Start
68. Utilizing Different IDE Views (1:41) Start
69. Finding Help & Working with MDN (5:53) Start
70. The ECMAScript Standard (1:00) Start
71. How to "google" Correctly (1:44) Start
72. Debugging JavaScript - An Overview (3:17) Start
73. An Error Message! No Reason To Panic! (4:26) Start
74. Using console.log() to look "into the Code" (3:49) Start
75. Next-Level Debugging with the Chrome Devtools & Breakpoints (8:20) Start
76. Testing Code Changes Directly in the Devtools (2:05) Start
77. Debugging Code directly Inside VS Code (4:55) Start
78. Wrap Up (1:22) Start
79. Useful Resources & Links (1:00) Start

Section: Working with Control Structures (if Statements, Loops, Error Handling)

80. Module Introduction (2:26) Start
81. Introducing "if" Statements & Boolean (Comparison) Operators (9:26) Start
82. Using "if" Statements (7:23) Start
83. Working with "if", "else" and "else-if" (5:10) Start
84. Beware When Comparing Objects & Arrays for Equality! (4:06) Start
85. The Logical AND and OR Operators (9:10) Start
86. Understanding Operator Precedence (7:20) Start
87. Quiz 6: if & Boolean Operators - The Basics (1:00) Start
88. Beyond true/ false: "Truthy" and "Falsy" Values (7:30) Start
89. Coercion vs Conversion (1:00) Start
90. Quiz 7: Falsy and Truthy Values (1:00) Start
91. Setting Up a Bigger Example Project (The "Monster Killer") (2:59) Start
92. Adding an "Attack" Function (7:57) Start
93. Using "if" Statements for Checking the Win-Condition (9:17) Start
94. Adding More "if" Statements & A "Strong Attack" Functionality (7:41) Start
95. Time for a "Heal Player" Functionality! (10:15) Start
96. Controlling the Conditional Bonus Life (Without Boolean Operators!) (5:59) Start
97. Adding a "Reset Game" Functionality (6:00) Start
98. Validating User Input (6:17) Start
99. Utilizing Global Constants as Identifiers in Conditional Code (3:20) Start
100. Adding a Conditional Battle Log (16:37) Start
101. Introducing the Ternary Operator (7:31) Start
102. A Bit of Theory: Statements vs Expressions (1:40) Start
103. Logical Operator "Tricks" & Shorthands (12:58) Start
104. Quiz 8: Logical Operators & How They Work (1:00) Start
105. Working with the "switch-case" Statement (7:10) Start
106. Introducing Loops (6:40) Start
107. The "for" Loop (7:38) Start
108. The "for-of" Loop (5:16) Start
109. The "for-in" Loop (6:49) Start
110. The "while" & "do-while" Loops (8:00) Start
111. Quiz 9: Loops - Basics (1:00) Start
112. Assignment - Control Structures (Problem) (2:47) Start
113. Assignment - Control Structures (Solution) (9:55) Start
114. Controlling Loops with "break" (8:11) Start
115. Controlling Iterations with "continue" (2:21) Start
116. More Control with Labeled Statements (6:26) Start
117. Quiz 10: break & continue (1:00) Start
118. Error Handling with "try-catch" - An Introduction (2:25) Start
119. Throwing Custom Errors (5:16) Start
120. Working with "try-catch" to Catch & Handle Errors (8:14) Start
121. Quiz 11: Error Handling (1:00) Start
122. Wrap Up (3:21) Start
123. Useful Resources & Links (1:00) Start

Section: Behind the Scenes & The (Weird) Past (ES3, ES5) & Present (ES6+) of JavaScript

124. Module Introduction (1:43) Start
125. ES5 vs ES6+ ("Next Gen JS") - Evolution of JavaScript (8:14) Start
126. var vs let & const - Introducing "Block Scope" (14:32) Start
127. Understanding "Hoisting" (4:07) Start
128. Strict Mode & Writing Good Code (5:46) Start
129. Quiz 12: "JavaScript Specialties" (1:00) Start
130. How Code is Parsed & Compiled (8:16) Start
131. Inside the JavaScript Engine - How the Code Executes (15:59) Start
132. [DEEP DIVE] JavaScript Language vs Browser APIs (1:00) Start
133. Primitive vs Reference Values (19:24) Start
134. Garbage Collection & Memory Management (12:00) Start
135. Wrap Up (1:55) Start
136. Useful Resources & Links (1:00) Start

Section: More on Functions

137. Module Introduction (1:31) Start
138. Recapping Functions Knowledge - What We Know Thus Far (1:52) Start
139. Parameters vs Arguments (1:00) Start
140. Functions vs Methods (5:46) Start
141. Functions are Objects! (2:47) Start
142. Function Expressions: Storing Functions in Variables (5:12) Start
143. Function Expressions vs Function Declarations (2:47) Start
144. Anonymous Functions (5:54) Start
145. Working on the Project: Adding User Choices to the Game (7:44) Start
146. Implementing the Core Game Logic (7:20) Start
147. Introducing Arrow Functions (8:41) Start
148. Quiz 13: Creating Functions (1:00) Start
149. Outputting Messages to the User (3:53) Start
150. Default Arguments in Functions (10:45) Start
151. Introducing Rest Parameters ("Rest Operator") (8:57) Start
152. Creating Functions Inside of Functions (3:04) Start
153. Understanding Callback Functions (6:09) Start
154. Assignment - Functions (Problem) (3:16) Start
155. Assignment - Functions (Solution) (8:19) Start
156. Working with "bind()" (8:39) Start
157. Adding bind() to the Calculator Project (3:46) Start
158. Quiz 14: Functions - Advanced (1:00) Start
159. call() and apply() (1:18) Start
160. Wrap Up (2:10) Start
161. Useful Resources & Links (1:00) Start

Section: Working with the DOM (Browser HTML Code) in JavaScript

162. Module Introduction (1:48) Start
163. What's the "DOM"? (6:00) Start
164. Document and Window Object (6:20) Start
165. Understanding the DOM and how it's created (7:07) Start
166. Nodes & Elements - Querying the DOM Overview (5:55) Start
167. Selecting Elements in the DOM (9:54) Start
168. Summary: Node Query Methods (1:00) Start
169. Exploring and Changing DOM Properties (7:37) Start
170. Attributes vs Properties (8:58) Start
171. Selecting Multiple Elements & Summary (5:13) Start
172. Quiz 15: DOM Basics (1:00) Start
173. Assignment - DOM Querying (Problem) (2:10) Start
174. Assignment - DOM Querying (Solution) (5:41) Start
175. Traversing the DOM - Overview (6:22) Start
176. Traversing Child Nodes (9:15) Start
177. Using parentNode & parentElement (5:01) Start
178. Selecting Sibling Elements (4:05) Start
179. DOM Traversal vs Query Methods (4:35) Start
180. Styling DOM Elements (12:18) Start
181. Creating Elements with JS - Overview (2:42) Start
182. Adding Elements via HTML in Code (7:42) Start
183. Adding Elements via createElement() (5:42) Start
184. Inserting DOM Elements (8:15) Start
185. Cloning DOM Nodes (1:45) Start
186. Live Node Lists vs Static Node Lists (4:55) Start
187. Removing Elements (1:56) Start
188. Insertion & Removal Method Summary (2:38) Start
189. Summary: Insert, Replace, Remove (1:00) Start
190. Setting Up the Practice Project (2:16) Start
191. Selecting the Modal and "Add" Button (8:58) Start
192. Opening a Modal by Changing CSS Classes (5:01) Start
193. Controlling the Backdrop (8:04) Start
194. Fetching and Validating User Input (8:06) Start
195. Creating a Movie in JavaScript & Clearing the Input (4:00) Start
196. Rendering Movie Items on the Screen (8:23) Start
197. Deleting Movie Elements (9:12) Start
198. Showing & Hiding the "Are you sure?" Dialog (7:08) Start
199. Starting with the Confirmation Logic (4:29) Start
200. Finishing the App (11:45) Start
201. Wrap Up (1:55) Start
202. Useful Resources & Links (1:00) Start

Section: More on Arrays & Iterables

203. Module Introduction (1:08) Start
204. What are "Iterables" and "Array-like Objects"? (2:11) Start
205. Creating Arrays (8:55) Start
206. Which Data Can You Store In Arrays? (3:47) Start
207. push(), pop(), unshift(), shift() - Adding & Removing Elements (6:59) Start
208. The splice() Method (5:37) Start
209. Selecting Ranges & Creating Copies with slice() (4:26) Start
210. arrays-it-08-concat (2:23) Start
211. Retrieving Indexes with indexOf() /& lastIndexOf() (3:47) Start
212. Finding Stuff: find() and findIndex() (5:20) Start
213. Is it Included? (1:20) Start
214. Alternative to for Loops: The forEach() Method (4:24) Start
215. Transforming Data with map() (2:38) Start
216. sort()ing and reverse()ing (4:15) Start
217. Filtering Arrays with filter() (2:35) Start
218. Where Arrow Functions Shine! (1:31) Start
219. The Important reduce() Method (7:33) Start
220. Chaining Methods in JavaScript (1:00) Start
221. Arrays & Strings - split() and join() (4:21) Start
222. The Spread Operator (...) (10:31) Start
223. Understanding Array Destructuring (4:24) Start
224. Maps & Sets - Overview (4:16) Start
225. Working with Sets (7:20) Start
226. Working with Maps (9:30) Start
227. Maps vs Objects (3:41) Start
228. Understanding WeakSet (4:50) Start
229. Understanding WeakMap (2:51) Start
230. Assignment - Arrays & Iterables (Problem) (3:05) Start
231. Assignment - Arrays & Iterables (Solution) (10:55) Start
232. Wrap Up (1:25) Start
233. Useful Resources & Links (1:00) Start

Section: More on Objects

234. Module Introduction (1:38) Start
235. What's an Object? (5:54) Start
236. Objects - Recap (2:42) Start
237. Adding, Modifying & Deleting Properties (6:46) Start
238. Special Key Names & Square Bracket Property Access (8:36) Start
239. Property Types & Property Order (3:55) Start
240. Dynamic Property Access & Setting Properties Dynamically (4:11) Start
241. Quiz 16: Object Properties (1:00) Start
242. Demo App & Shorthand Property Syntax (9:22) Start
243. Rendering Elements based on Objects (5:36) Start
244. for-in Loops & Outputting Dynamic Properties (5:24) Start
245. Adding the Filter Functionality (5:38) Start
246. Understanding "Chaining" (Property & Method Chaining) (1:51) Start
247. The Object Spread Operator (...) (5:54) Start
248. Understanding Object.assign() (2:08) Start
249. Object Destructuring (6:13) Start
250. Checking for Property Existance (2:42) Start
251. Introducing "this" (5:52) Start
252. The Method Shorthand Syntax (1:07) Start
253. The "this" Keyword And Its Strange Behavior (5:41) Start
254. call() and apply() (3:22) Start
255. What the Browser (Sometimes) Does to "this" (3:32) Start
256. "this" and Arrow Functions (10:36) Start
257. Quiz 17: "this" (1:00) Start
258. Getters & Setters (7:05) Start
259. Wrap Up (1:33) Start
260. Useful Resources & Links (1:00) Start

Section: Classes & Object-oriented Programming (OOP)

261. Module Introduction (1:55) Start
262. What is "Object-oriented Programming" (OOP)? (3:17) Start
263. Getting Started with OOP Code (12:10) Start
264. Defining & Using a First Class (7:17) Start
265. Working with Constructor Methods (4:51) Start
266. Fields vs Properties (2:19) Start
267. Using & "Connecting" Multiple Classes (9:06) Start
268. Binding Class Methods & Working with "this" (4:57) Start
269. Adding a Cart and Shop Class (4:37) Start
270. Communicating Can Be Challenging! (3:54) Start
271. Static Methods & Properties (4:31) Start
272. First Summary & Classes vs Object Literals (4:06) Start
273. Getters & Setters (5:43) Start
274. Introducing Inheritance (2:34) Start
275. Implementing Inheritance (11:50) Start
276. Using Inheritance Everywhere (6:51) Start
277. Overriding Methods and the super() Constructor (6:00) Start
278. super() Constructor Execution, Order & "this" (6:46) Start
279. Different Ways of Adding Methods (5:51) Start
280. Private Properties (7:24) Start
281. Assignment - Classes & OOP (Problem) (2:39) Start
282. Assignment - Classes & OOP (Solution) (13:36) Start
283. The "instanceof" Operator (4:30) Start
284. Understanding Object Descriptors (7:35) Start
285. Built-in Classes (1:09) Start
286. Quiz 18: Classes (1:00) Start
287. Wrap Up (1:51) Start
288. Useful Resources & Links (1:00) Start

Section: Deep Dive: Constructor Functions & Prototypes

289. Module Introduction (1:34) Start
290. Introducing Constructor Functions (4:02) Start
291. Constructor Functions vs Classes & Understanding "new" (4:17) Start
292. Introducing Prototypes (16:46) Start
293. Working with Prototypes (5:19) Start
294. The Prototype Chain and the Global "Object" (8:26) Start
295. Quiz 19: Constructor Functions & Prototypes (1:00) Start
296. Classes & Prototypes (5:24) Start
297. Methods in Classes & In Constructors (10:16) Start
298. Built-in Prototypes in JavaScript (2:12) Start
299. Setting & Getting Prototypes (10:58) Start
300. Wrap Up (2:49) Start
301. Useful Resources & Links (1:00) Start

Section: Practice: OOP & Classes

302. Module Introduction (1:38) Start
303. First Project Steps & Planning (4:46) Start
304. Creating Project Lists & Parsing Element Data (4:08) Start
305. Starting with the "Switch Project" Logic (9:59) Start
306. Passing Method References Around (7:02) Start
307. Moving DOM Elements (11:49) Start
308. Adding a Tooltip (8:58) Start
309. Adding Inheritance (6:13) Start
310. Wrap Up (0:57) Start
311. Useful Resources & Links (1:00) Start

Section: Back to the DOM & More Browser APIs

312. Module Introduction (2:31) Start
313. Using "dataset" (data-* Attributes) (6:51) Start
314. Getting Element Box Dimensions (5:53) Start
315. Working with Element Sizes & Positions (4:56) Start
316. The DOM & Prototypes (2:21) Start
317. Positioning the Tooltip (10:57) Start
318. Handling Scrolling (5:36) Start
319. Working with Tags (5:14) Start
320. Loading Scripts Dynamically (7:35) Start
321. Setting Timers & Intervals (7:37) Start
322. The "location" and "history" Objects (4:20) Start
323. The "navigator" Object (4:50) Start
324. Working with Dates (3:17) Start
325. The "Error" Object & Constructor Function (3:21) Start
326. Wrap Up (0:43) Start
327. Useful Resources & Links (1:00) Start

Section: Working with Events

328. Module Introduction (1:31) Start
329. Introduction to Events in JavaScript (6:18) Start
330. Different Ways of Listening to Events (6:59) Start
331. Removing Event Listeners (5:13) Start
332. The "event" Object (5:43) Start
333. Supported Event Types (8:00) Start
334. Working with "preventDefault()" (5:15) Start
335. Understanding "Capturing" & "Bubbling" Phases (2:02) Start
336. Event Propagation & "stopPropagation()" (7:39) Start
337. Using Event Delegation (8:33) Start
338. Triggering DOM Elements Programmatically (3:40) Start
339. Event Handler Functions & "this" (2:28) Start
340. Quiz 20: Events (1:00) Start
341. Drag & Drop - Theory (4:58) Start
342. Configuring Draggable Elements (6:23) Start
343. Marking the "Drop Area" (8:52) Start
344. Dropping & Moving Data + Elements (6:58) Start
345. Firefox Adjustments (1:00) Start
346. Wrap Up (1:15) Start
347. Useful Resources & Links (1:00) Start

Section: Advanced Function Concepts

348. Module Introduction (0:57) Start
349. Pure Functions & Side-Effects (6:13) Start
350. Impure vs Pure Functions (2:00) Start
351. Factory Functions (5:41) Start
352. Closures (7:45) Start
353. Closures in Practice (7:01) Start
354. Closures & Memory Management (1:23) Start
355. Optional: IIFEs (1:00) Start
356. Introducing "Recursion" (7:32) Start
357. Advanced Recursion (9:01) Start
358. Quiz 21: Advanced Functions (1:00) Start
359. Wrap Up (1:14) Start
360. Useful Resources & Links (1:00) Start

Section: More on Numbers & Strings

361. Module Introduction (0:53) Start
362. How Numbers Work & Behave in JavaScript (7:46) Start
363. Floating Point (Im)Precision (11:04) Start
364. The BigInt Type (3:36) Start
365. The Global "Number" and "Math" Objects (2:47) Start
366. Example: Generate Random Number Between Min/ Max (5:33) Start
367. Exploring String Methods (1:43) Start
368. Tagged Templates (10:28) Start
369. Introducing Regular Expressions ("RegEx") (4:30) Start
370. More on Regular Expressions (7:25) Start
371. Wrap Up (1:20) Start
372. Useful Resources & Links (1:00) Start

Section: Async JavaScript: Promises & Callbacks

373. Module Introduction (1:12) Start
374. Understanding Synchronous Code Execution ("Sync Code") (2:51) Start
375. Understanding Asynchronous Code Execution ("Async Code") (5:44) Start
376. Blocking Code & The "Event Loop" (10:30) Start
377. Sync + Async Code - The Execution Order (4:03) Start
378. Multiple Callbacks & setTimeout(0) (3:20) Start
379. Quiz 22: Asynchronous Code (1:00) Start
380. Getting Started with Promises (8:25) Start
381. Chaining Multiple Promises (5:52) Start
382. Promise Error Handling (7:46) Start
383. Async/ await (9:11) Start
384. Async/ await & Error Handling (3:07) Start
385. Async/ await vs "Raw Promises" (4:56) Start
386. Promise.all(), Promise.race() etc. (7:59) Start
387. Quiz 23: Promises & async/ await (1:00) Start
388. Wrap Up (1:27) Start
389. Useful Resources & Links (1:00) Start

Section: Working with Http Requests

390. Module Introduction (1:06) Start
391. What & Why (5:03) Start
392. More Background about Http (5:24) Start
393. Getting Started with Http (3:35) Start
394. Sending a GET Request (3:46) Start
395. JSON Data & Parsing Data (9:14) Start
396. Promisifying Http Requests (with XMLHttpRequest) (3:49) Start
397. Sending Data with a POST Request (4:55) Start
398. Triggering Requests via the UI (3:12) Start
399. Sending a DELETE Request (4:56) Start
400. Handling Errors (5:03) Start
401. Using the fetch() API (7:10) Start
402. POSTing Data with the fetch() API (2:38) Start
403. Adding Request Headers (3:01) Start
404. fetch() & Error Handling (7:11) Start
405. XMLHttpRequest vs fetch() (1:42) Start
406. Working with FormData (6:58) Start
407. Wrap Up (1:17) Start
408. Useful Resources & Links (1:00) Start

Section: Working with JavaScript Libraries

409. Module Introduction (0:59) Start
410. What & Why (2:55) Start
411. Adding Libraries (Example: lodash) (9:10) Start
412. Example: jQuery (2:30) Start
413. Discovering Libraries (3:25) Start
414. Axios Library & Http Requests (10:46) Start
415. Third-Party Library Considerations (4:54) Start
416. Wrap Up (0:59) Start
417. Useful Resources & Links (1:00) Start

Section: Modular JavaScript (Working with Modules)

418. Module Introduction (0:56) Start
419. Splitting Code in a Sub-optimal Way (7:12) Start
420. A First Step Towards JavaScript Modules (3:25) Start
421. We Need a Development Server! (5:58) Start
422. First import / export Work (3:41) Start
423. Switching All Files To Use Modules (4:26) Start
424. More Named Export Syntax Variations (6:12) Start
425. Working With Default Exports (3:35) Start
426. Dynamic Imports & Code Splitting (5:24) Start
427. When Does Module Code Execute? (2:06) Start
428. Module Scope & globalThis (6:18) Start
429. Quiz 24: Modules (1:00) Start
430. Wrap Up (1:37) Start
431. Useful Resources & Links (1:00) Start

Section: JavaScript Tooling & Workflows

432. Module Introduction (3:23) Start
433. Project Limitations & Why We Need Tools (8:11) Start
434. Workflow Overview (2:42) Start
435. Setting Up a npm Project (3:45) Start
436. Working with npm Packages (3:39) Start
437. Linting with ESLint (8:38) Start
438. Bundling with Webpack (15:13) Start
439. Bonus: Multiple Entry Points (1:00) Start
440. Development Mode & Fixing "Lazy Loading" (4:00) Start
441. Using webpack-dev-server (3:14) Start
442. Generating Sourcemaps (3:05) Start
443. Building For Production (3:45) Start
444. Final Optimizations (6:35) Start
445. Using Third Party Packages with npm & Webpack (4:06) Start
446. Wrap Up (1:39) Start
447. Useful Resources & Links (1:00) Start

Section: Utilizing Browser Storage

448. Module Introduction (1:05) Start
449. Browser Storage Options (7:21) Start
450. localStorage & sessionStorage (10:43) Start
451. Getting Started with Cookies (6:06) Start
452. Working with Cookies (8:10) Start
453. Getting Started with IndexedDB (8:55) Start
454. Working with IndexedDB (4:06) Start
455. Wrap Up (0:48) Start
456. Useful Resources & Links (1:00) Start

Section: JavaScript & Browser Support

457. Module Introduction (1:29) Start
458. What Is "Browser Support" About? (7:36) Start
459. Determining Browser Support For A JavaScript Feature (8:20) Start
460. Determining Required Support (3:29) Start
461. Solution: Feature Detection + Fallback Code (9:55) Start
462. Solution: Using Polyfills (3:18) Start
463. Solution: Transpiling Code (12:01) Start
464. Improvement: Automatically Detect + Add Polyfills (11:02) Start
465. What about Support Outside of Browsers? (0:57) Start
466. Browser Support Outside of JavaScript Files (2:36) Start
467. Wrap Up (1:18) Start
468. Useful Resources & Links (1:00) Start

Section: Time to Practice: Share My Place App

469. Module Introduction (0:53) Start
470. Setting Up the Project (3:05) Start
471. Getting DOM Access (4:33) Start
472. Getting the User Location (6:27) Start
473. Adding Feedback (Showing a Modal) (11:16) Start
474. Hiding the Modal (2:38) Start
475. Rendering a Map with Google Maps (14:16) Start
476. Continuing without a Credit Card (1:00) Start
477. Finding an Address & Getting the Coordinates (8:22) Start
478. Converting User Input to Coordinates (3:35) Start
479. Creating a "Share Place" Link (8:30) Start
480. Copying the Link to the Clipboard (3:36) Start
481. Rendering the "Shared Place" Screen (6:22) Start
482. Useful Resources & Links (1:00) Start

Section: Working with JavaScript Frameworks

483. Module Introduction (1:06) Start
484. What and Why? (7:35) Start
485. The Idea Behind React.js (2:46) Start
486. Analysing a React Project (17:38) Start
487. Wrap Up (1:35) Start
488. Useful Resources & Links (1:00) Start

Section: Meta-Programming: Symbols, Iterators, Generators, Reflect API & Proxy API

489. Module Introduction (1:51) Start
490. Understanding Symbols (8:27) Start
491. Well-known Symbols (5:15) Start
492. Understanding Iterators (5:32) Start
493. Generators & Iterable Objects (11:02) Start
494. Generators Summary & Built-in Iterables Examples (3:21) Start
495. The Reflect API (7:10) Start
496. The Proxy API and a First "Trap" (9:04) Start
497. Working with Proxy Traps (2:57) Start
498. Wrap Up (1:37) Start
499. Useful Resources & Links (1:00) Start

Section: Node.js: An Introduction

500. Module Introduction (1:42) Start
501. JavaScript is a Hosted Language (2:21) Start
502. Installation & Basics (6:16) Start
503. Understanding Modules & File Access (4:39) Start
504. Working with Incoming Http Requests (5:46) Start
505. Sending Responses (HTML Data) (4:01) Start
506. Parsing Incoming Data (10:53) Start
507. Introducing & Installing Express.js (2:48) Start
508. Express.js: The Basics (6:33) Start
509. Extracting Data (4:23) Start
510. Rendering Server-side HTML with Templates & EJS (6:52) Start
511. Enhancing Our Project (3:44) Start
512. Adding Basic REST Routes (12:09) Start
513. Understanding CORS (Cross Origin Resource Sharing) (5:13) Start
514. Sending the Location ID to the Frontend (2:16) Start
515. Adding the GET Location Route (7:16) Start
516. Introducing MongoDB (Database) (14:44) Start
517. NodeJS Error Handling (1:00) Start
518. Wrap Up (1:50) Start
519. Useful Resources & Links (1:00) Start

Section: Security

520. Module Introduction (1:35) Start
521. Security Hole Overview & Exposing Data in your Code (6:45) Start
522. Cross-Site Scripting Attacks (XSS) (14:39) Start
523. Third-Party Libraries & XSS (5:17) Start
524. Quiz 25: XSS & Exposing Confidential Details (1:00) Start
525. CSRF Attacks (Cross Site Request Forgery) (4:16) Start
526. CORS (Cross Origin Resource Sharing) (2:53) Start
527. Wrap Up (1:30) Start
528. Useful Resources & Links (1:00) Start

Section: Deploying JavaScript Code

529. Module Introduction (1:11) Start
530. Deployment Steps (7:29) Start
531. Different Types of Websites (1:00) Start