Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Book 1: JavaScript Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
CHAPTER 1: Jumping into JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
CHAPTER 2: Filling Your JavaScript Toolbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
CHAPTER 3: Using Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
CHAPTER 4: Working with Operators and Expressions . . . . . . . . . . . . . . . . . . . . . . . . . 81
CHAPTER 5: Controlling Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
CHAPTER 6: Using Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
CHAPTER 7: Making and Using Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
CHAPTER 8: Writing and Running Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
CHAPTER 9: Getting Oriented with Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
CHAPTER 10: Making Things Happen with Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
CHAPTER 11: Writing Asynchronous JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
CHAPTER 12: Using JavaScript Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Book 2: Meet Your Web Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
CHAPTER 1: What a Web Browser Does . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
CHAPTER 2: Programming the Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Book 3: React . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
CHAPTER 1: Getting Started with React . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
CHAPTER 2: Writing JSX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
CHAPTER 3: Building React Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
CHAPTER 4: Using Data and Events in React . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
Book 4: Vue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
CHAPTER 1: Getting an Overview of Vue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
CHAPTER 2: Introducing Vue Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
CHAPTER 3: Making Vue Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
CHAPTER 4: Using Data and Reactivity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
CHAPTER 5: Responding to Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
Book 5: Svelte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421
CHAPTER 1: Getting Started with Svelte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
CHAPTER 2: Building with Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
CHAPTER 3: Designing Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
,CHAPTER 4: Using Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
CHAPTER 5: Using the Component Lifecycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471
CHAPTER 6: Advanced Svelte Reactivity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483
Book 6: Sharpening Your Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
CHAPTER 1: Building from Scratch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
CHAPTER 2: Optimizing and Bundling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513
CHAPTER 3: Testing Your JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535
Book 7: Node.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557
CHAPTER 1: Node.js Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559
CHAPTER 2: Streaming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587
CHAPTER 3: Working with Buffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603
CHAPTER 4: Accessing the File System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613
CHAPTER 5: Networking with Node . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627
CHAPTER 6: Using Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639
CHAPTER 7: Error Handling and Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651
CHAPTER 8: Accessing Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673
CHAPTER 9: Riding on the Express Train . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697
CHAPTER 10: Registration and Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755
, Table of Contents
INTRODUCTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Why This Book? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
JavaScript is a huge topic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
How this book is different . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Conventions Used in This Book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Foolish Assumptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Icons Used in This Book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Beyond the Book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Where to Go from Here . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
BOOK 1: JAVASCRIPT FUNDAMENTALS . . . . . . . . . . . . . . . . . . . . . . . 7
CHAPTER 1: Jumping into JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
JavaScript, the Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
JavaScript is a programming language . . . . . . . . . . . . . . . . . . . . . . . .10
A short and epic history of JavaScript . . . . . . . . . . . . . . . . . . . . . . . . .12
Reading and Copying JavaScript Code . . . . . . . . . . . . . . . . . . . . . . . . . . .15
How the web works . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15
Front end and back end . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16
The front end is open, the back end is closed . . . . . . . . . . . . . . . . . .18
The value of a service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .21
JavaScript on the server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22
Starting Your Development Environment . . . . . . . . . . . . . . . . . . . . . . . .22
Installing Visual Studio Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23
Learning to use Visual Studio Code . . . . . . . . . . . . . . . . . . . . . . . . . .25
Writing Your First JavaScript Program . . . . . . . . . . . . . . . . . . . . . . . . . . .29
JavaScript is made of statements . . . . . . . . . . . . . . . . . . . . . . . . . . . .30
JavaScript is case-sensitive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31
JavaScript ignores white space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31
JavaScript programmers use camelCase and underscores . . . . . . .32
Running Code in the Console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33
Rerunning Commands in the Console . . . . . . . . . . . . . . . . . . . . . . . . . . .34
Running Code in a Browser Window . . . . . . . . . . . . . . . . . . . . . . . . . . . .35
Running JavaScript from HTML event attributes . . . . . . . . . . . . . . . .35
Running HTML inside script elements . . . . . . . . . . . . . . . . . . . . . . . .36
Including JavaScript files in your HTML . . . . . . . . . . . . . . . . . . . . . . .37
CHAPTER 2: Filling Your JavaScript Toolbox . . . . . . . . . . . . . . . . . . . . . . . . 41
Installing Node.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43
Configuring Visual Studio Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43
Getting prettier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .44
Installing Live Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
Table of Contents v