1. How to use event delegation with jQuery
  2. How I built a password toggle script in vanilla JavaScript
  3. Declare multiple JavaScript variables in one statement
  4. Building a word and character count app in vanilla JavaScript
  5. Named callback functions in JavaScript
  6. The difference between parameters and arguments in JavaScript functions
  7. Short-circuit evaluation in JavaScript
  8. Recreating jQuery's basic "effects" in vanilla JS
  9. How to manipulate an element's classes in vanilla JS
  10. Reduce an array to a single value with vanilla JS
  11. How to scope your selectors in vanilla JS
  12. How to empty an element in vanilla JS
  13. Returning boolean values in JavaScript
  14. How to check if every item in an array meets a condition
  15. The nullish coalescing operator in JavaScript
  16. How I built a random quotes app with vanilla JavaScript
  17. How I built a top stories feed in vanilla JS
  18. How to get your Jekyll posts as a JavaScript array
  19. How to detect form submissions in JavaScript
  20. How to structure a JavaScript file
  21. How to build a JavaScript clock
  22. How to stop an infinite loop in Chromium
  23. My favourite ES6 features
  24. My approach to event delegation
  25. How I use event delegation with Reef
  26. The difference between nodeName and tagName
  27. How to get the active element in DevTools
  28. Resources for regular expressions
  29. Two ways to create a regular expression in JavaScript
  30. Array literals vs the Array() constructor
  31. Three ways to write a JavaScript function
  32. Guard clauses in JavaScript
  33. The simplest way to check the event target
  34. How the Array.prototype.slice.call() trick works
  35. Static vs live NodeLists
  36. Syntax errors vs logic errors
  37. How to get the last item in a JavaScript array
  38. String concatenation in vanilla JS
  39. Nodes aren't always HTML elements
  40. Name your variables explicitly
  41. Everyone has JavaScript, right?
  42. How to manipulate attributes in vanilla JS
  43. Array.indexOf() vs Array.includes()
  44. How to get the children of an element in vanilla JS
  45. Get an element's total width and height in vanilla JS
  46. The outerHTML property in vanilla JS
  47. How to check an email address in vanilla JS
  48. Understanding client-side JavaScript frameworks
  49. How to write an IIFE from scratch
  50. The difference between break and continue in JavaScript
  51. The textContent and innerText properties in vanilla JS
  52. The console.table() method in JavaScript
  53. What is the DOM?
  54. Properties and methods in JavaScript
  55. Dot notation and bracket notation in JavaScript
  56. Introducing JavaScript objects
  57. Understanding prototypes and inheritance in JavaScript
  58. The in operator vs the hasOwnProperty() method in vanilla JavaScript
  59. Never rely on the global event property in JavaScript
  60. Event flow in JavaScript
  61. The difference between event target and event currentTarget
  62. The difference between event.stopPropagation() and event.stopImmediatePropagation()
  63. The event.preventDefault() method in JavaScript
  64. Getting started with Svelte
  65. The instanceof operator in JavaScript
  66. An addClass() helper function
  67. How to check if an object has at least one property in JavaScript
  68. Named access on the window object
  69. Implicit return statements in JavaScript
  70. The const keyword in JavaScript
  71. Changing the context of the forEach() callback
  72. The flatMap() method in vanilla JS
  73. The difference between null and undefined in JavaScript
  74. Setting defaults for package.json
  75. How to check if a value is an array in JavaScript
  76. How to inspect JSON data in Chrome DevTools and Visual Studio Code
  77. When should you use a switch statement in JavaScript?
  78. Serialize form data into a query string in vanilla JS
  79. Serialize form data into an array in vanilla JS
  80. Serialize form data into an object in vanilla JS
  81. Serialize form data into a JSON string in vanilla JS
  82. Serialize.js: A tiny form serialization library
  83. Get the common ancestor of two or more elements in vanilla JS
  84. Get a random truthy/falsy value in JavaScript
  85. Sorting numbers in vanilla JS
  86. The FizzBuzz challenge in JavaScript
  87. Simple is better than complex
  88. Long string literals in JavaScript
  89. How to document your JavaScript functions
  90. The difference between this and $(this) in jQuery
  91. Convert a string to title case in vanilla JS
  92. Loop through an object using the Object.keys() method
  93. The string repeat() method in vanilla JS
  94. Return values in JavaScript functions
  95. Chaining function calls in JavaScript
  96. The array at() method in vanilla JS
  97. Adding two arrays together in JavaScript
  98. Detect if a function was invoked as a constructor in JavaScript
  99. How to replace a class in vanilla JS
  100. Caching jQuery selections for better performance
  101. Type checking JavaScript in Visual Studio Code
  102. Numeric separators in JavaScript
  103. jQuery is still cool
  104. Implicit iteration in jQuery
  105. The modern syntax for the ready() method in jQuery
  106. Throwing errors in JavaScript
  107. Catching errors in JavaScript
  108. Working with data attributes in vanilla JS
  109. Browser APIs versus third-party APIs
  110. Accessible links in single-page apps
  111. The Promise.allSettled() method
  112. Unique array values in JavaScript
  113. How to choose between let and const in JavaScript
  114. Asynchronously check if a file exists in Node.js
  115. Asynchronously read and write files in Node.js
  116. Asynchronously append data to a file in Node.js
  117. Revisiting FizzBuzz
  118. How to get today's date in vanilla JS
  119. Compare dates in vanilla JS
  120. Nutrition cards for accessible components
  121. An accessible accordion component
  122. An accessible button component
  123. An accessible disclosure component
  124. The FocusEvent.relatedTarget property in vanilla JS
  125. An accessible menu component
  126. Event delegation in vanilla JS and jQuery
  127. JavaScript: Private instance members in 2022
  128. Handle an event once in vanilla JS
  129. Aborting event listeners in vanilla JS
  130. Inspect nested objects in Node.js
  131. Top-level await in vanilla JS
  132. Using default and named exports together in vanilla JS
  133. Two ways to create an img element in vanilla JS
  134. The URL constructor in vanilla JS
  135. The import.meta object in vanilla JS
  136. The HTMLFormElement.elements property in vanilla JS
  137. Understanding callback functions in vanilla JS
  138. Asynchronous callback functions in vanilla JS
  139. How to wrap a function in a Promise in vanilla JS
  140. Consuming promises in vanilla JS
  141. Async functions in vanilla JS
  142. Prefix vs postfix operators in vanilla JS
  143. Conditionally toggle a class in vanilla JS
  144. Prevent leaking arrow functions in vanilla JS
  145. Why the .at() method exists in vanilla JS
  146. Not everything is an object in JavaScript
  147. Type coercion is a feature, not a bug
  148. Embracing the equality operator in JavaScript
  149. Delegated event handlers using object methods
  150. Understanding the virtual DOM
  151. Composition in React
  152. Rendering API data in React
  153. Safely rendering HTML in React
  154. Client-side routing with React Router 6.4
  155. CommonJS vs ES modules
  156. Namespace imports in ES modules
  157. Create a range of numbers using the Array.from() method
  158. A simple class for numeric ranges
  159. Iterators and generators in JavaScript
  160. Generating the alphabet in JavaScript
  161. Building an analog clock in vanilla JS
  162. Pretty-printing JSON responses in Express
  163. Class-based access privileges
  164. Three ways to check if an object has a property in JavaScript
  165. Object.hasOwn() versus Object.prototype.hasOwnProperty()
  166. The .prototype property versus the [[Prototype]] internal slot in JavaScript
  167. Four ways to set the prototype of an object in JavaScript
  168. Subclassing with prototypes in JavaScript
  169. Extending constructors in JavaScript
  170. The super keyword in object literals
  171. An alternative to the super keyword in JavaScript
  172. Property descriptors in JavaScript
  173. Three ways to prevent changes to an object in JavaScript
  174. Enumerations in JavaScript
  175. Three ways to pass extra arguments to a function in JavaScript
  176. Currying and partial application in JavaScript
  177. New array methods in ECMAScript 2023
  178. Custom hooks in React
  179. When should you use an arrow function in JavaScript?
  180. Method definitions versus function properties in JavaScript
  181. Empty statements in JavaScript
  182. Find all HTML elements used on a page
  183. Import maps for JavaScript modules
  184. Aggregating JavaScript modules
  185. The typeof operator in TypeScript
  186. Encapsulation in object-oriented JavaScript (OOJS)
  187. Referential equality in JavaScript
  188. Signals in React
  189. Building an accessible disclosure with Petite Vue
  190. How to run TypeScript code in Node.js
  191. Is Node.js still vanilla JS?
  192. Grouping array elements in JavaScript
  193. Making objects iterable in JavaScript
  194. Async iterables in JavaScript
  195. First-class functions in JavaScript
  196. The var keyword is still cool
  197. How promises work “under the hood” in JavaScript
  198. JavaScript modules and the file URI scheme