1. Get Started with JavaScript
2. What is JavaScript used for
3. Run JavaScript in The Browser Console
4. Run JavaScript with HTML
5. Run JavaScript with Node.js
6. Introduction
7. Declaring Variables in JavaScript
8. If, Else, and Else If in JavaScript
9. JavaScripts Many Different For-Loops
10. While-Loops in JavaScript
11. Introduction -3
12. Weak vs. Strong Typing and Dynamic vs. Static Typing
13. Numbers in JavaScript
14. Strings in JavaScript
15. Booleans in JavaScript
16. Introduction -5
17. Objects in JavaScript
18. Arrays in JavaScript
19. Functions in JavaScript
20. BigInts, Symbols, and Undefined in JavaScript
21. Introduction -7
22. Let Variables vs. Var Variables
23. Double- and Triple-Equals Comparisons in JavaScript
24. Built-in Errors in JavaScript
25. Try-Catch Blocks in JavaScript
26. Introduction
27. JavaScript Array Basics
28. Using the Spread Operator with Arrays
29. Array Equality and Passing by Reference
30. Deep-Equals Testing with Arrays
31. Introduction
32. The Array Constructor and .fill Method
33. The .shift and .unshift Methods
34. The .splice and .slice Methods
35. The .toString and .join Methods
36. The .includes, .indexOf, and .lastIndexOf Methods
37. Introduction -3
38. The .forEach Method
39. The .find and .findIndex Methods
40. The .filter Method
41. The .some and .every Methods
42. The .map and .flatMap Methods
43. Introduction
44. JavaScript Object Basics
45. The Spread Operator and Object Destructuring
46. Object Equality and Passing by Reference
47. Deep-Equals Testing with Objects
48. Introduction
49. The .keys and .values Methods
50. The .entries and .fromEntries Methods
51. The .assign Method
52. The .freeze and .isFrozen Methods
53. The .preventExtensions and .isExtensible Methods
54. Introduction -3
55. The .reduce Method Basics
56. Intermediate .reduce Use Cases
57. Advanced .reduce Use Cases
58. The .reduceRight Method and Starting Values
59. Introduction
60. Calculate Array Min and Max
61. Recreating Built-in Methods with Reduce
62. Removing Duplicates
63. Introduction
64. Installing Lodash into a Node.js Project
65. Adding Lodash to a Front-end Project
66. Calling Basic Lodash Functions
67. Extra Array Function Arguments
68. Introduction
69. Main Groups of Lodash Functions
70. The .pull and .pullAll Functions
71. The .pullAllBy, .pullAllWith, and .pullAt Functions
72. The .uniq and .sortedUniq Functions
73. Introduction
74. The Four Main Function Groups
75. The .intersection Functions
76. The .difference Functions
77. The .union Functions
78. The .xor Functions
79. The By Transform Function
80. Introduction
81. JavaScripts Built-in .sort Method
82. Sorting with Comparator Functions
83. Preventing Array Mutation
84. Sorting Arrays of Objects and Arrays
85. Lodash Sorting Functions
86. Introduction
87. Basic Function Syntax
88. The arguments Object
89. Default Arguments in Functions
90. Functions Inside Objects
91. Introduction
92. The .flatten, .flattenDeep, and .flattenDepth Functions
93. The .chunk and .partition Functions
94. The .zip and .unzip Functions
95. Introduction
96. The .toPairs and .fromPairs Functions
97. The .zipObject and .zipObjectDeep Functions
98. The .countBy and .groupBy Functions
99. Introduction -3
100. Creating New Dates
101. Accessing Time Units
102. Date Setter Methods
103. Introduction
104. Basic Class Syntax
105. Defining Methods and Static Variables
106. JavaScript Class Inheritance
107. Introduction -3
108. Pre-ES6 JavaScript Classes
109. The instanceof Keyword
110. Prototypal Inheritance Basics
111. Interfaces in JavaScript
112. Introduction -5
113. The 3 Main Asynchronous Strategies
114. Asynchronous Programming with Callbacks
115. Callback Examples
116. Asynchronous Programming with Promises
117. Asynchronous Programming with Async and Await
118. Introduction
119. Setting Up an Express Project
120. Creating an Express Server
121. Adding Basic Request Handlers
122. Separating Express Routes by Path
123. Introduction
124. Handling Different Request Types
125. Testing POST, PUT, and DELETE Routes
126. Handling a Request Body
127. Handling URL and Query Parameters
128. Introduction
129. Methods for Customizing Responses
130. Working with Cookies
131. Adding Middleware to Express Servers
132. Introduction -3
133. Creating a List Endpoint
134. Creating a Read Endpoint
135. Creating a Search Endpoint
136. Creating a Create Endpoint
137. Creating Delete and Update Endpoints
138. Introduction
139. In-Depth String Details
140. Array-Related String Methods
141. Colorizing Strings with Chalk
142. Introduction
143. Basics of the FS Package
144. Reading Files
145. Writing Data to Files
146. Introduction
147. Command-Line Arguments in Node.js
148. Parsing Flags in Command-Line Arguments
149. Boolean Flags and Flags with Multiple Values
150. Introduction
151. Getting User Input with Prompts
152. The Readline Promises Package
153. Strategies for Displaying Multiple Prompts
154. Collecting Multi-Line Input
155. Introduction
156. Basic Functions for Console Drawing
157. Drawing a Square
158. Creating a Draw Rectangle Function
159. Introduction
160. Basic 4-Bit Console Color Syntax
161. 8-Bit and RGB Console Color Syntax
162. Other Font Decorations
163. Creating Color Helper Functions
164. Introduction -3
165. Creating a Basic Loading Animation
166. Creating an Animated Loading Bar
167. Position Adjustments for Animations
168. Displaying Progress for Real Tasks
169. Introduction -5
170. Designing the Game
171. The Main Game Loop
172. Displaying Player Moves on the Grid
173. Tracking Player Moves
174. Displaying the Tic-Tac-Toe Grid
175. Introduction -7
176. Deciding Who Wins and Ending the Game
177. Calculating Vertical, Diagonal, and Corner Wins
178. Validating and Parsing User Input
179. Introduction -9
180. Basics of Websockets
181. Setting Up A Socket.io Client and Server
182. Sending and Handling Socket Events
183. Creating a Simple Chat-Room Program
184. Introduction 1
185. Creating Client-Side and Server-Side Programs
186. Basic Server-Client Communication Strategy
187. Waiting for Other Players to Join
188. Hosting Node.js Servers on Heroku
189. Introduction 3
190. Starting the Game and Printing the Grid
191. Getting Player Input Remotely
192. Ending the Game Remotely
193. Validating Input and Releasing Updates
194. Introduction 5
195. Calculating Cats Games
196. Rethinking the Player Management Strategy
197. Managing Multiple Games
198. Introduction 7
199. Making Sure Positions are Empty
200. Publishing the Client-Side Script to NPM
201. Joining Games by ID
202. Handling Different Join Methods