0%

Book Description

Cut through the noise and get real results with a step-by-step approach to beginner JavaScript development

Key Features

  • A structured, straightforward introduction to JavaScript for beginners
  • A JavaScript tutorial with step-by-step exercises and activities that help build key skills
  • Structured to let you progress at your own pace, on your own terms
  • Use your physical print copy to redeem free access to the online interactive edition

Book Description

You already know you want to learn JavaScript, and a smarter way to learn JavaScript is to learn by doing. The JavaScript Workshop focuses on building up your practical skills so that you can develop cutting-edge applications for web, mobile and desktop users. Alongside knowledge of HTML and CSS, JavaScript is a key skill for those looking to enter professional web development. You'll learn from real examples that lead to real results.

Throughout The JavaScript Workshop, you'll take an engaging step-by-step approach to understanding JavaScript code. You won't have to sit through any unnecessary theory. If you're short on time you can jump into a single exercise each day or spend an entire weekend learning about functional programming and unit testing. It's your choice. Learning on your terms, you'll build up and reinforce key skills in a way that feels rewarding.

Every physical print copy of The JavaScript Workshop unlocks access to the interactive edition. With videos detailing all exercises and activities, you'll always have a guided solution. You can also benchmark yourself against assessments, track progress, and receive content updates. You'll even earn a secure credential that you can share and verify online upon completion. It's a premium learning experience that's included with your printed copy. To redeem, follow the instructions located at the start of your JavaScript book.

Fast-paced and direct, The JavaScript Workshop is the ideal companion for JavaScript beginners. You'll build and iterate on your JavaScript coding skills like a real software developer, learning along the way. This process means that you'll find that your new skills stick, embedded as best practice. A solid foundation for the years ahead.

What you will learn

  • Learn how you can work with JavaScript to develop for the modern web
  • Discover ways to write clean and maintainable JavaScript code
  • Learn how to use unit testing to write bug free and stable JavaScript code
  • Simplify your workflow with package managers like Gulp, Grunt, and Webpack
  • Improve the performance of your web applications with server-side JavaScript
  • Explore ways to access and process external resources within your JavaScript application

Who this book is for

Our goal at Packt is to help you be successful, in whatever it is you choose to do. The JavaScript Workshop is an ideal JavaScript tutorial for the JavaScript beginner who is just getting started. Pick up a Workshop today, and let Packt help you develop skills that stick with you for life.

Table of Contents

  1. Preface
    1. About the Book
      1. About the Chapters
      2. Conventions
      3. Before You Begin
      4. Installing Visual Studio Code
      5. Installing the "Open in Default Browser" Extension
      6. Downloading Node.js
        1. Windows
        2. Mac
        3. Linux
        4. Verifying the Installation
      7. Installing the Code Bundle
  2. 1. Getting to Know JavaScript
    1. Introduction
    2. What Is JavaScript and How Is It Used?
      1. JavaScript versus Other Languages
      2. Exercise 1.01: Languages Discovery
    3. A Brief History of the JavaScript Language
      1. Netscape Mocha and LiveScript
      2. Sun Microsystems and Java
      3. Ecma International and ECMAScript
    4. Versions of ECMAScript (and JavaScript)
      1. ECMAScript 1 (1997)
      2. ECMAScript 2 (1998)
      3. ECMAScript 3 (1999)
      4. ECMAScript 4 (unreleased)
      5. ECMAScript 5 (2009)
      6. ECMAScript 6 (2015)
      7. ECMAScript 7 (2016), ECMAScript 8 (2017), and ECMAScript 9 (2018)
      8. Exercise 1.02: Can I Use This Feature?
    5. Accessing Web Browser Developer Tools
      1. Google Chrome
      2. Microsoft Edge
      3. Apple Safari
    6. An Introduction to Variables
      1. Exercise 1.03: Programming First Steps
      2. Activity 1.01: Creating an Alert Box Popup in the Web Browser
    7. Overview of JavaScript Capabilities
      1. Client-Side Form Validation
      2. JavaScript Widgets or Components
      3. XML HTTP Requests (XHR)
      4. Storing Local Data
      5. DOM Manipulation
      6. Animations and Effects
    8. Summary
  3. 2. Working with JavaScript
    1. Introduction
    2. Integrated Development Environments (IDE)
      1. GitHub's Atom
      2. Sublime Text
      3. Adobe Dreamweaver
      4. JetBrains WebStorm
      5. Microsoft Visual Studio Code
    3. JavaScript Project and File Management
      1. Project Folders and Files
      2. Exercise 2.01: Creating a Working Project Directory
    4. JavaScript Syntax and Structure
      1. Exercise 2.02: Creating Project Boilerplate
      2. Basic JavaScript Syntax
      3. JavaScript Execution Order
      4. Exercise 2.03: Verifying an Execution Order
    5. Overview of JavaScript Environments
      1. Browser-Based JavaScript
      2. Server-Based JavaScript
      3. Desktop JavaScript
      4. Mobile JavaScript
    6. A Closer Look at Web Browser Developer Tools
      1. The Elements View
      2. The Console View
      3. The Sources View
      4. The Network View
    7. HTML Element Manipulation with JavaScript
      1. Activity 2.01: Adding and Modifying an Item to/in the To-Do List
    8. Summary
  4. 3. Programming Fundamentals
    1. Introduction
    2. Data Types
      1. Representation of Data
        1. Literal Values
        2. Using Operators in Expressions
      2. Exercise 3.01: Implementing Expressions and Operators
        1. Using Variables and Constants in Expressions
      3. Exercise 3.02: Working with Variables Using the Web Browser Console
        1. Functions That Return Values
      4. Exercise 3.03: Using Functions in Expressions
      5. The Object Data Type
        1. Ready-Made Objects
      6. Exercise 3.04: Working with Ready-Made Objects
        1. Self-Made Objects
        2. Object Dot Notation
        3. The Array Object
        4. Using the Console Object
    3. Syntax
      1. Semicolon at the End of Code Statements
      2. Lines of Code versus Statements
      3. Comments
    4. Conditional and Loop Flow
      1. Code Blocks
      2. Conditional Flow Statements
        1. if...else Statement
        2. if Statement
      3. Exercise 3.05: Writing an if statement
        1. if Statement and else Statement
      4. Exercise 3.06: Writing an if...else Statement
        1. if Statements with Multiple else...if Statements
        2. if Statement, Multiple else...if statements, and the else Statement
      5. Exercise 3.07: Writing an if Statement with Multiple if else Statements and the else Statement
        1. The break Statement
        2. switch Statement
      6. Exercise 3.08: Writing a switch Statement and Testing It
      7. Loop Statements
        1. for Statement
      8. Exercise 3.09: Writing a for Loop and Testing It
        1. do...while Statement
      9. Exercise 3.10: Writing a do...while Loop and Testing It
        1. while Statement
      10. Exercise 3.11: Writing a while Loop and Testing It
        1. for...in Statement
      11. Exercise 3.12: Writing a for...in Loop and Testing It
        1. for...of Statement
        2. Exercise 3.13: Writing a for...of Loop and Testing It
        3. continue Statement
        4. Labeled Statement
    5. Writing and Invoking Functions
      1. Defining Functions
        1. Function Declaration
      2. Exercise 3.14: Writing a Function as a Statement and Invoking It
      3. Function Expression
      4. Exercise 3.15: Writing a Function as an Expression and Invoking It
        1. Arrow Function Expression
        2. Defining and Invoking an Arrow Function Expression
      5. Exercise 3.16: Writing an Arrow Function and Invoking It
    6. Reacting to User Input Events and Updating the DOM
      1. The DOM HTML Element Object
      2. Getting Access to Elements in the DOM
      3. Creating Elements and Content in the DOM
      4. DOM Events
      5. Exercise 3.17: Working with DOM Manipulation and Events
      6. Debugging
        1. Silent Fail
        2. Syntax Bugs
      7. Logic Bugs
      8. Debugging
      9. Debuggers
      10. Activity 3.01: The To-Do List Shuffle Program
    7. Summary
  5. 4. JavaScript Libraries and Frameworks
    1. Introduction
    2. Framework versus Library
      1. Vanilla.js
    3. Popular JavaScript Frameworks
      1. Everlasting jQuery
      2. Where to Find and How to Use External Code
      3. Exercise 4.01: Using a Third-Party Library in Your Code
      4. jQuery versus Vanilla.js
        1. Manipulating the DOM
    4. Making XHR Requests
      1. Exercise 4.02: Handling Click Events with jQuery
      2. Exercise 4.03: Handling the Same Event with Vanilla.js
      3. UI Animation Using jQuery
      4. Exercise 4.04: Animating a "Peek-a-boo" on Button Click
    5. Frameworks versus Core JavaScript
      1. Exercise 4.05: Rendering a List of To-Dos Using React
      2. Exercise 4.06: Rendering a List of To-Dos without a Library
      3. Exercise 4.07: Creating a Library Yourself
      4. Activity 4.01: Adding an Animation to the To-Do List Application
    6. Summary
  6. 5. Beyond the Fundamentals
    1. Introduction
    2. Creating Variables
      1. A Note on Referencing
      2. Global Assignment
      3. Declaring with var
      4. Declaring with let
      5. Declaring with const
      6. Exercise 5.01: Variables and Scope
      7. Identifying a Variable's Type
      8. Exercise 5.02: Evaluating Types from Variables
    3. Fixed Types
      1. The null Value
      2. The undefined Value
      3. Boolean Values
    4. Boolean Operators
      1. Comparison Operators
      2. Logical Operators
      3. Exercise 5.03: Odds and Evens
      4. Testing the Truth of Values
      5. The NOT Operator
      6. Boolean Operator Precedence
      7. Boolean Operator Associativity
      8. Exercise 5.04: Free Home Delivery Eligibility Validation
      9. Why You Shouldn't Compare Boolean and Non-Boolean Expressions
      10. Why You Shouldn't Chain Comparison Expressions
      11. The Ternary Operator
    5. Working with Numbers
      1. Arithmetic Limitations
      2. The Number Object
      3. Number Functions
      4. Number Methods
      5. Number Properties
      6. Exercise 5.05: Currency Formatter
    6. Working with Strings
      1. Special Characters
      2. Concatenation
      3. Template Literals
      4. Exercise 5.06: Email Templates
    7. The String Object
      1. The length Property
      2. String Methods
      3. Exercise 5.07: Sentence Reversal
      4. The toString Method
      5. Numbers with Strings
    8. Working with Functions
      1. Anonymous Functions
      2. Callbacks
      3. Exercise 5.08: Functional Parameters
      4. Arrow Functions
      5. Arrow Function Caveats
      6. Generator Functions
      7. The this Keyword
      8. The arguments Keyword
      9. Call and Apply
      10. Exercise 5.09: Dynamic Currying
      11. Activity 5.01: Simple Number Comparison
    9. Working with Objects
      1. Objects as Hashtables
      2. Object Keys and Memory
      3. Object and Pass-By Reference
      4. Object Iteration
      5. Object Accessors
      6. Exercise 5.10: Converting Objects to toString
    10. Working with Arrays
      1. Arrays and Mutability
      2. Array Iteration
      3. Built-In Array Functions
    11. Working with Dates
      1. Parsing Date Strings
      2. Formatting Dates into Strings
      3. Date Math
      4. Activity 5.02: Creating a To-Do Model
    12. Summary
  7. 6. Understanding Core Concepts
    1. Introduction
    2. Event Types
      1. Timer Events
      2. Exercise 6.01: Custom Timer
      3. Event Timers
      4. The setInterval Function
      5. The setTimeout Function
      6. Timer Parameters
      7. Exercise 6.02: Real-Time Clock
    3. The JavaScript Events Model
      1. Event Bubbling
      2. Traversing the Node Tree
      3. Direct Node Acquisition
      4. Assigning and Removing an Event Handler
      5. Exercise 6.03: Tabbed Content
      6. Bubbling versus Capturing
    4. The JavaScript Event Life Cycle
      1. Halting Event Propagation
      2. Halting Event Actions
      3. Exercise 6.04: Conditional Event Prevention
    5. Event Triggers
      1. Custom Events
      2. Native Event Triggers
      3. Event Hander Attributes
      4. Events and Memory
    6. Working with Forms
      1. HTTP
      2. The Form Tag
      3. Submitting a Form with JavaScript
      4. Form Submission Events
      5. Preventing Form Submission
      6. Resetting a Form
      7. Form Reset Event
      8. Exercise 6.05: Simple Form Handling
    7. Form Controls
      1. Input Controls
      2. The Button Control
      3. The Checkbox Control
      4. The Radio Control
      5. The Text Control
      6. The Password Control
      7. email, tel, and url Controls
      8. The Hidden Control
      9. The Number Control
      10. The Image Control
      11. The File Control
      12. The Textarea Control
      13. The Select Control
      14. Activity 6.01: Making Changes to the Model
    8. Summary
  8. 7. Popping the Hood
    1. Introduction
    2. JavaScript Execution and the Event Loop
      1. The JavaScript Runtime
      2. JavaScript Engine
      3. Environment APIs
      4. Message Queue
      5. Event Loop
      6. Call Stack
      7. Memory Heap
      8. Event Loop in Action
      9. Exercise 7.01: Working with the Event Loop
      10. Stack Overflow
      11. Exercise 7.02: Stack Overflow
    3. Memory Management
      1. The Garbage Collector
      2. Memory Leaks
      3. Event Listeners
      4. Detached DOM Nodes
      5. Global Variables
      6. Identifying Memory Leaks
      7. Exercise 7.03: Identifying Memory Leaks
      8. Exercise 7.04: Fixing the Memory Leak
      9. Activity 7.01: Finding out the Number of Stack Frames
    4. Summary
  9. 8. Browser APIs
    1. Introduction
    2. Canvas
      1. Exercise 8.01: Drawing Shapes Using Canvas Elements
      2. Manipulate Shapes Using Path
      3. Activity 8.01: Creating a Simple Fractal
    3. Web Audio API
      1. Exercise 8.02: Creating an Oscillator Waveform
      2. Activity 8.02: Playing Sound and Controlling Frequency Using Two Oscillators
      3. Audio Visualization
    4. Web Storage API
      1. Exercise 8.03: Storing and Populating Name Using the localStorage API
    5. IndexedDB
      1. Exercise 8.04: Creating an Object Store and Adding Data
      2. Querying IndexedDB
      3. Exercise 8.05: Querying the Database
      4. IndexedDB Cursor
      5. Exercise 8.06: Fetching, Storing, and Querying Data
    6. Performance API
      1. Exercise 8.07: Assessing Performance
    7. Web Socket API
      1. Exercise 8.08: Creating Chat Rooms Using Websockets
      2. Activity 8.03: Audio Visualization
    8. Summary
  10. 9. Working with Node.js
    1. Introduction
    2. The Node.js Environment
      1. Sync versus Async
      2. Background of Request Processing
      3. What Are Callbacks?
      4. The Node.js Shell
      5. Exercise 9.01: Your First Program
      6. How to Import/Require a Module in a Node.js Application
      7. Node Package Manager (npm)
        1. Flags
        2. Commands
      8. package.json
      9. Publishing a Package
    3. Node Modules
      1. Node.js Modules
      2. Exercise 9.02: Updating URL Information Using the URL Module
      3. Filesystem
      4. Operating System
      5. Exercise 9.03: Fetching Details about the Operating System
      6. Path Module
      7. Exercise 9.04: How to Extract and Join Directories
    4. HTTP
      1. Exercise 9.05: Using a Node.js Server
      2. Third-Party Modules
      3. Express.js
      4. The bodyParser Module
      5. Morgan Logger
    5. Working with Databases
      1. Setting up Databases
      2. Connecting with Databases
      3. MySQL
      4. Exercise 9.06: Install, Connect, and Process Responses with a MySQL Server
      5. MongoDB
      6. Exercise 9.07: Installing and Configuring a Connection in MongoDB
    6. Making Real-Time Web Apps
      1. WebSocket
      2. Socket.IO
      3. Exercise 9.08: Building a Chat Application
      4. Activity 9.01: Create a Web Application to Upload, Store, and Save Image Details
    7. Summary
  11. 10. Accessing External Resources
    1. Introduction
    2. JSON
      1. REST
      2. What Is HTTP?
      3. TheSportsDB
      4. Exercise 10.01: Using a REST API to Make Calls
      5. HTTP Headers
    3. AJAX
      1. jQuery
      2. Exercise 10.02: Using AJAX and the jQuery ajax() Method to Invoke a Service
      3. Exercise 10.03: More AJAX and Some CSS Styling
      4. CSS
    4. Other Libraries and XMLHttpRequest
      1. Axios and the Fetch API
      2. For Comparison: XMLHttpRequest and jQuery
      3. Using jQuery and XMLHttpRequest for POST Requests
      4. Cross-Domain Requests
      5. CORS Header
      6. Activity 10.01: Implement REST Service Calls Using Various Techniques
    5. Summary
  12. 11. Creating Clean and Maintainable Code
    1. Introduction
    2. What Is a Regex?
    3. Regexes in Detail
      1. Literal Characters
      2. Special Characters, Anchors, and Escaping
      3. Word Boundary
      4. Shorthand Character Classes and Word Characters
      5. Inverse Classes
      6. Dot Character
      7. Sets
      8. Ranges
      9. Excluding Sets and Ranges
      10. Quantifiers
      11. Shorthand Quantifiers
      12. Alternation
      13. Many More Regex Concepts
      14. Pattern Specification and Flags
      15. Finding Matches with String.match()
      16. Exercise 11.01: The Effect of the g Flag
      17. Other String Methods for Regexes
      18. Exercise 11.02: Modifying Regex to Match a Pattern
      19. Adding More Strings to the Regex
      20. Activity 11.01: Expanding Phone Number Matching Patterns to Accept Multiple Formats
      21. Activity 11.02: Expanding Phone Number Matching Patterns to Accept a Particular Format
      22. Useful Regexes
    4. Best Practices for Clean Coding
      1. Good Naming Practices
      2. JavaScript Linters
      3. Exercise 11.03: JSLint
      4. Activity 11.03: Refactoring to Clean Code
      5. Summary
  13. 12. Using Next‑Generation JavaScript
    1. Introduction
    2. Browser Differences
      1. polyfills
      2. Transpilers
      3. Development Methodology Libraries
    3. Package Managers
      1. The Node Package Manager
      2. Installing Modules
      3. The Yarn Package Manager
      4. The Babel Transpiler
        1. @babel/core
        2. @babel/cli
        3. @babel/preset-env
        4. @babel/polyfill
        5. .babelrc Configuration File
      5. Exercise 12.01: A Basic Babel Project
    4. Babel Applications with Parcel
      1. What is Parcel?
      2. Using Parcel
      3. Modular Applications in Parcel
      4. Exercise 12.02: A Basic Parcel Project
    5. Babel Applications with Webpack
      1. Webpack Architecture
      2. Webpack Loaders and Plugins
      3. Webpack Configuration
      4. Exercise 12.03: A Basic WebPack Project
      5. Other Popular Bundlers
        1. Other Language Transpiling
    6. The TypeScript Language
      1. Exercise 12.04: A Basic TypeScript Project
      2. Elm and ClojureScript
      3. Haxe
    7. Code Support Libraries
      1. jQuery
      2. Underscore, Lodash, and Ramda
      3. Client Frameworks Overview
      4. Models, Views, and Controllers
      5. Virtual DOMs
      6. Reactive Programming
    8. Popular Frameworks
      1. AngularJS
      2. ReactJS
      3. Vue.js
    9. Server-Side Libraries
      1. Express
      2. Request
      3. Socket.IO
      4. Activity 12.01: Creating a Project to Recognize and Compile TypeScript Files
    10. Summary
  14. 13. JavaScript Programming Paradigms
    1. Introduction
    2. JavaScript Paradigms
      1. The Procedural Paradigm
      2. Exercise 13.01: Implementing Procedural Programming
      3. The Object-Oriented Paradigm
      4. Exercise 13.02: Implementing OOP
        1. Encapsulation
        2. Inheritance
      5. Exercise 13.03: Inheritance Implementation Using the extends Keyword
    3. Basic JavaScript Concepts
      1. Prototypes and Prototypical Inheritance
      2. What Is Prototypical Inheritance?
      3. Exercise 13.04: Prototypical Inheritance Implementation
      4. Anonymous Functions
      5. The Differences between Named Functions and Anonymous Functions
    4. Data Scope
      1. Global Scope
      2. Local Scope
        1. Function-Level Scope
        2. Block-Level Scope
      3. Hoisting
      4. The Difference between var and let
      5. Closures
    5. JavaScript Memory Management
      1. Memory Life Cycle
      2. Static versus Dynamic Allocation
      3. Releasing Memory
      4. Reference-Counting Garbage Collection
      5. Activity 13.01: Creating a Calculator App
    6. Summary
  15. 14. Understanding Functional Programming
    1. Introduction
    2. Pure Functions
      1. Side Effects
      2. Immutability
      3. Exercise 14.01: Immutable Values and Objects – Strings
      4. Exercise 14.02: Immutable Values and Objects – Numbers
      5. Exercise 14.03: Mutability – Arrays
      6. Exercise 14.04: Mutability – Objects
      7. Cloning Objects and Arrays
      8. Sample Data for Examples and Exercises
    3. Higher-Order Functions
      1. The Array.prototype.filter Method
      2. A Refresher
      3. Eliminating for Loops
      4. The Array.prototype.map Method
      5. Exercise 14.05: Another Way of Using Array.prototype.map
      6. The Array.prototype.reduce method
      7. Exercise 14.06: Grouping with Array.prototype.reduce
      8. Composition with compose() and pipe()
      9. Implementation of compose() and pipe()
    4. Currying Functions
      1. Exercise 14.07: More Uses for Composition and Curried Functions
    5. Function Recursion
      1. Exercise 14.08: Creating a Deck of Cards Using reduce()
      2. Exercise 14.09: Using the pipe Method to Create a Card Shuffling Function
    6. Blackjack
      1. Mapping Card Values to Cards
      2. Activity 14.01: Blackjack Card Functions
      3. Managing Blackjack Game State
      4. Blackjack Game Logic Flow
      5. Blackjack Game Display Functions
      6. Blackjack Code Listing
    7. Summary
  16. 15. Asynchronous Tasks
    1. Introduction
    2. Callbacks
      1. setTimeout()
      2. Exercise 15.01: Asynchronous Execution with setTimeout()
      3. Callback Hell and the Pyramid of Doom
    3. Promises and the Fetch API
      1. Using the Fetch API to Get Player Honors
      2. Exercise 15.02: Refactoring the Honors List to Use the Fetch API
      3. An Improvement for Better Performance
      4. Tidying Up Fetch Code
      5. Some Fetch API Usage Details
    4. Some Details Concerning Promises
      1. Exercise 15.03: Creating a Utility Function to Delay Execution
      2. Further Refinements to addDelay()
    5. Async/Await
      1. Asynchronous Generators and Iterators
      2. Activity 15.01: Refactoring Promise Code to await/async Syntax
      3. Activity 15.02: Further Simplifying Promise Code to Remove Function Parameters
    6. Summary
  17. Appendix
    1. Chapter 1: Getting to Know JavaScript
      1. Activity 1.01: Creating an Alert Box Popup in the Web Browser
        1. Solution
    2. Chapter 2: Working with JavaScript
      1. Activity 2.01: Adding and Modifying an Item to/in the To-Do List
        1. Solution
    3. Chapter 3: Programming Fundamentals
      1. Activity 3.01: The To-Do List Shuffle Program
        1. Solution
    4. Chapter 4: JavaScript Libraries and Frameworks
      1. Activity 4.01: Adding an Animation to the Todo List Application
        1. Solution:
    5. Chapter 5: Beyond the Fundamentals
      1. Activity 5.01: Simple Number Comparison
        1. Solution
      2. Activity 5.02: Creating a TODO Model
        1. Solution
    6. Chapter 6: Understanding Core Concepts
      1. Activity 6.01: Making Changes to the Model
        1. Solution:
    7. Chapter 7: Popping the Hood
      1. Activity 7.01: Finding out the Number of Stack Frames
        1. Solution
    8. Chapter 8: Browser APIs
      1. Activity 8.01: Creating a Simple Fractal
        1. Solution
      2. Activity 8.02: Playing Sound and Controlling Frequency Using Two Oscillators
        1. Solution
      3. Activity 8.03: Audio Visualization
        1. Solution
    9. Chapter 9: Working with Node.js
      1. Activity 9.01: Create a Web Application to Upload, Store, and Save Image Details
        1. Solution
    10. Chapter 10: Accessing External Resources
      1. Activity 10.01: Implement REST Service Calls Using Various Techniques
        1. Solution:
    11. Chapter 11: Creating Clean and Maintainable Code
      1. Activity 11.01: Expanding Phone Number Matching Patterns to Accept Multiple Formats
        1. Solution:
      2. Activity 11.02: Expanding Phone Number Matching Patterns to Accept a Particular Format
        1. Solution:
      3. Activity 11.03: Refactoring to Clean Code
        1. Solution:
    12. Chapter 12: Using Next-Generation JavaScript
      1. Activity 12.01: Creating a Project to Recognize and Compile TypeScript Files
        1. Solution:
    13. Chapter 13: JavaScript Programming Paradigms
      1. Activity 13.01: Creating a Calculator App
        1. Solution
    14. Chapter 14: Understanding Functional Programming
      1. Activity 14.01: Blackjack Card Functions
        1. Solution:
    15. Chapter 15: Asynchronous Tasks
      1. Activity 15.01: Refactoring Promise Code to await/async Syntax
        1. Solution
      2. Activity 15.02: Further Simplifying Promise Code to Remove Function Parameters
        1. Solution
3.235.120.24