JavaScript Glossary
Key terms from the JavaScript course, linked to the lesson that introduces each one.
2,557 terms.
#
- `'long'`
- Full words (e.
- Lesson 1658 — Style Options: Long, Short, and NarrowLesson 2238 — Intl.ListFormat: Formatting Lists in Natural Language
- `'narrow'`
- Most compact (e.
- Lesson 1658 — Style Options: Long, Short, and NarrowLesson 2238 — Intl.ListFormat: Formatting Lists in Natural Language
- `'short'`
- Abbreviated form (e.
- Lesson 1658 — Style Options: Long, Short, and NarrowLesson 2238 — Intl.ListFormat: Formatting Lists in Natural Language
- `"always"`
- Forces numeric output in all cases.
- Lesson 1657 — Understanding Numeric vs Always OptionsLesson 2224 — Numeric vs Always Options
- `"auto"`
- (default): Uses descriptive words when they exist and feel natural.
- Lesson 1657 — Understanding Numeric vs Always OptionsLesson 2224 — Numeric vs Always Options
- `==` (loose equality)
- compares values *after attempting type conversion*
- Lesson 54 — Equality vs Identity: == and ===Lesson 204 — Equality: == vs ===
- `===` (strict equality)
- compares both value *and* type without any conversion
- Lesson 54 — Equality vs Identity: == and ===Lesson 204 — Equality: == vs ===
- `arguments` object
- Lesson 402 — Choosing Between Arrow and Regular FunctionsLesson 840 — Array.from with Array-Like Objects
- `buffer`
- The underlying `ArrayBuffer` that holds the actual bytes
- Lesson 2326 — Buffer, ByteOffset, and BYTES_PER_ELEMENTLesson 2336 — Creating a DataView
- `byteLength`
- The total number of bytes the array occupies in memory
- Lesson 2325 — Length and ByteLength PropertiesLesson 2336 — Creating a DataView
- `byteOffset`
- How many bytes from the buffer's start your view begins
- Lesson 2326 — Buffer, ByteOffset, and BYTES_PER_ELEMENTLesson 2336 — Creating a DataView
- `configurable`
- Can the property be deleted or its descriptor changed?
- Lesson 609 — Property Descriptors: Writable, Enumerable, ConfigurableLesson 635 — Property Attributes: Writable, Configurable
- `context`
- An object containing metadata about what's being decorated
- Lesson 2070 — The Decorator Function SignatureLesson 2072 — Method Decorators
- `done`
- .
- Lesson 1075 — The Iterator Result ObjectLesson 1085 — Implementing the Iterator ProtocolLesson 2009 — The Iterator Object ContractLesson 2293 — Reading Chunks with read()Lesson 2294 — Processing Stream Data in a Loop
- `eslint:recommended`
- ESLint's official starter pack.
- Lesson 2558 — Extending Shared ConfigurationsLesson 2568 — Using Shareable Configs with 'extends'
- `exports`
- A shorthand reference to `module.
- Lesson 1447 — The Module Wrapper FunctionLesson 2538 — Main, Module, and Exports
- `false`
- → `0`
- Lesson 279 — ToNumber Abstract OperationLesson 853 — Introduction to filterLesson 1557 — Handling Write BackpressureLesson 1576 — How Backpressure Works InternallyLesson 1577 — The write() Return ValueLesson 2469 — Side Effects and 'sideEffects' Field
- `fileName`
- The file where the error occurred (Mozilla-specific)
- Lesson 1148 — Error Object PropertiesLesson 2153 — Handling Errors in Workers
- `filter()`
- returns an *array* of *all* matching elements
- Lesson 473 — Find vs Filter for Single ItemsLesson 1748 — Pure Functions and Array Methods
- `find()`
- returns the *first* matching element itself (or `undefined`)
- Lesson 473 — Find vs Filter for Single ItemsLesson 880 — find() vs filter()[0]Lesson 884 — Performance Characteristics and Use Cases
- `findLast()`
- returns the *value* of the last element that satisfies your test function:
- Lesson 475 — FindLast and FindLastIndexLesson 881 — Using findLast() and findLastIndex()
- `findLastIndex()`
- returns the *index* of that last matching element:
- Lesson 475 — FindLast and FindLastIndexLesson 881 — Using findLast() and findLastIndex()
- `forEach`
- executes code for each element but returns `undefined` (used only for side effects)
- Lesson 444 — Map vs ForEachLesson 858 — When to Use forEach vs map
- `headers`
- A Headers object containing response headers
- Lesson 2256 — The Response ObjectLesson 2267 — The Request Constructor and OptionsLesson 2274 — The Response Object Structure
- `hour`
- – displays the hour
- Lesson 1649 — Time Formatting with DateTimeFormatLesson 2211 — Component Options: Hour, Minute, Second
- `long`
- Detailed but slightly shorter
- Lesson 2209 — Date and Time StylesLesson 2225 — Style: long, short, and narrow
- `map`
- transforms data and returns a new array containing the results
- Lesson 444 — Map vs ForEachLesson 858 — When to Use forEach vs map
- `message`
- The description you provided (or an empty string if none given)
- Lesson 1142 — The Error ConstructorLesson 1148 — Error Object PropertiesLesson 2153 — Handling Errors in WorkersLesson 2169 — Basic PostMessage Syntax: Sender and Receiver
- `minute`
- – displays minutes
- Lesson 1649 — Time Formatting with DateTimeFormatLesson 2211 — Component Options: Hour, Minute, Second
- `module`
- An object representing the current module
- Lesson 1447 — The Module Wrapper FunctionLesson 2538 — Main, Module, and Exports
- `name`
- The type of error, which defaults to `"Error"`
- Lesson 1142 — The Error ConstructorLesson 1148 — Error Object PropertiesLesson 2070 — The Decorator Function SignatureLesson 2367 — The File Interface
- `NaN`
- stands for "Not-a-Number"—ironically, it *is* a number type!
- Lesson 36 — Special Number Values: NaN, InfinityLesson 57 — Comparing PrimitivesLesson 1597 — Math.sign to Determine Number Polarity
- `null` becomes `0`
- it's treated as "zero" or "nothing numeric"
- Lesson 285 — Null and Undefined Coercion RulesLesson 292 — null and undefined in Arithmetic
- `numeric`
- `'always'` (default) or `'auto'`.
- Lesson 2220 — Creating a RelativeTimeFormat InstanceLesson 2234 — Intl.Collator Constructor and Options
- `Object.entries(obj)`
- returns an array of `[key, value]` pairs
- Lesson 642 — Object.values() and Object.entries()Lesson 2017 — Iterating Non-Iterable Objects
- `Object.values(obj)`
- returns an array containing all the enumerable property *values*
- Lesson 642 — Object.values() and Object.entries()Lesson 2017 — Iterating Non-Iterable Objects
- `ok`
- A boolean—`true` if status is in the 200-299 range
- Lesson 2256 — The Response ObjectLesson 2274 — The Response Object Structure
- `Promise.any`
- resolves when the *first* promise fulfills, but only rejects if *all* promises reject.
- Lesson 1320 — Performance Characteristics of CombinatorsLesson 1974 — Promise.any vs Promise.race
- `Promise.race`
- settles as soon as *any* promise settles (fulfilled or rejected).
- Lesson 1320 — Performance Characteristics of CombinatorsLesson 1974 — Promise.any vs Promise.race
- `second`
- – displays seconds
- Lesson 1649 — Time Formatting with DateTimeFormatLesson 2211 — Component Options: Hour, Minute, Second
- `short`
- Compact, numeric-focused
- Lesson 2209 — Date and Time StylesLesson 2225 — Style: long, short, and narrow
- `status`
- The HTTP status code (200, 404, 500, etc.
- Lesson 2256 — The Response ObjectLesson 2274 — The Response Object Structure
- `statusText`
- Human-readable status ("OK", "Not Found")
- Lesson 2256 — The Response ObjectLesson 2274 — The Response Object Structure
- `Symbol.asyncIterator`
- enables objects to work with **asynchronous iteration** using `for-await-of`.
- Lesson 1020 — Symbol.asyncIterator for Async IterationLesson 2019 — What Symbol.asyncIterator RepresentsLesson 2022 — Creating a Custom Async Iterable
- `true`
- → `1`, **`false`** → `0`
- Lesson 279 — ToNumber Abstract OperationLesson 853 — Introduction to filterLesson 1557 — Handling Write BackpressureLesson 1576 — How Backpressure Works InternallyLesson 1577 — The write() Return Value
- `type`
- Describes the response type: `"basic"` (same-origin), `"cors"` (cross-origin with CORS), `"opaque"` (no-cors mode), or `"error"` (network failure).
- Lesson 2274 — The Response Object StructureLesson 2367 — The File Interface
- `undefined`
- means the variable exists but has no value (yet)
- Lesson 32 — undefined: The Default ValueLesson 279 — ToNumber Abstract OperationLesson 587 — Strict Mode and Undefined 'this'
- `undefined` becomes `NaN`
- it's treated as "not a valid number"
- Lesson 285 — Null and Undefined Coercion RulesLesson 292 — null and undefined in Arithmetic
- `value`
- and **`done`**.
- Lesson 1075 — The Iterator Result ObjectLesson 1085 — Implementing the Iterator ProtocolLesson 2009 — The Iterator Object ContractLesson 2070 — The Decorator Function SignatureLesson 2293 — Reading Chunks with read()Lesson 2294 — Processing Stream Data in a Loop
- `writable`
- Can the value be changed?
- Lesson 609 — Property Descriptors: Writable, Enumerable, ConfigurableLesson 635 — Property Attributes: Writable, Configurable
A
- AAA (Arrange-Act-Assert)
- and **Given-When-Then**.
- Lesson 2669 — Test Organization Patterns: AAA and Given-When-Then
- Accept
- Tells the server what response formats you can handle.
- Lesson 2262 — Setting Request HeadersLesson 2282 — Common HTTP Headers
- Accepting functions as arguments
- Lesson 439 — What Makes a Function Higher-Order
- Accepts one parameter
- Lesson 1765 — Manual Currying Example
- Accidental breaking changes
- A maintainer renames an "internal" function that users were actually importing
- Lesson 2526 — Semver in Practice: Trust and Reality
- Accumulating metrics or history
- Lesson 1876 — Growing Arrays and Objects
- accumulator
- – The value being built up across iterations (sometimes called "acc" or "result")
- Lesson 454 — The Reducer Function SignatureLesson 860 — Understanding Reduce: The Swiss Army Knife of Array MethodsLesson 861 — Reduce Signature: Accumulator, Current, Index, ArrayLesson 865 — Grouping Array Elements by PropertyLesson 866 — Flattening Arrays with Reduce
- Act/When
- Execute the behavior you're testing
- Lesson 2669 — Test Organization Patterns: AAA and Given-When-Then
- Actions
- are side effects that occur during a transition or while in a particular state.
- Lesson 2426 — State and Transition VocabularyLesson 2429 — Adding Side Effects and Actions
- adapter
- that translates calls between the two interfaces—like a plug adapter that lets your US device work in a European outlet.
- Lesson 1849 — The Adapter PatternLesson 1850 — When to Use Each Pattern
- Add a new package
- Lesson 2529 — Installing and Using Yarn
- Add cross-cutting concerns
- (logging, caching, access control) to many methods
- Lesson 2067 — What Decorators Are and Why They Exist
- Add domain context
- – Include properties like `accountId` or `retryAfter` that matter to your business logic
- Lesson 1151 — Why Custom Error Classes
- Add iteration
- – Run the trigger many times (100, 1000, 10000) to amplify the effect
- Lesson 1894 — Reproducing Leaks Systematically
- Adding complexity
- that makes code harder to read and maintain
- Lesson 1901 — The Danger of Premature Optimization
- Adding/removing values often
- – Set operations are optimized
- Lesson 1066 — Array vs Set: Handling Unique Values
- Additional formatters
- For lists, relative time, pluralization, and more
- Lesson 1643 — What Intl Solves: Beyond Naive Formatting
- Advanced Error Recovery
- Custom `throw()` implementations can handle errors and decide whether to continue iteration, resume from a checkpoint, or abort completely.
- Lesson 1095 — When Custom Iterators Beat Generators
- Advanced inference scenarios
- like mapped types, recursive type manipulation, or inferring types from deeply nested structures hit JSDoc's parsing limits.
- Lesson 2649 — Limitations: When TypeScript Becomes Necessary
- After (async/await)
- Lesson 2264 — Async/Await with Fetch
- After (named)
- Lesson 1254 — Naming Callbacks for Clarity
- After (optimized)
- Lesson 372 — Minimizing Work Inside the Loop Body
- After (point-free)
- Lesson 1788 — Simple Point-Free Conversions
- After branch switches
- Run `npm ci` to delete node_modules and reinstall exactly what the lockfile specifies—or run `npm install` if you want to update the lock to match package.
- Lesson 2503 — When Lockfiles Get Out of Sync
- Airbnb
- One of the most comprehensive style guides, covering ES6+, React, and accessibility.
- Lesson 2558 — Extending Shared Configurations
- all
- occurrences, use a global regex with the `g` flag:
- Lesson 171 — Replacing Substrings with replaceLesson 466 — The Every Method: Testing All ElementsLesson 630 — Object.getOwnPropertyNames()Lesson 633 — Object.getOwnPropertyDescriptors()Lesson 644 — Object.getOwnPropertyNames() Includes Non-EnumerableLesson 884 — Performance Characteristics and Use CasesLesson 1216 — The Rendering PhaseLesson 1299 — Promise.all: Waiting for Multiple Promises (+11 more)
- All microtasks
- run first, completely emptying the microtask queue
- Lesson 1191 — Two Queues: Tasks and Microtasks
- All-in-one tooling
- Bundler, test runner, and package manager included
- Lesson 19 — Deno and Bun: Alternative Runtimes
- Allocation instrumentation on timeline
- Records memory allocations over time as your app runs
- Lesson 1884 — Opening DevTools Memory ProfilerLesson 1890 — Using Allocation Instrumentation on Timeline
- Allocation sampling
- A lighter-weight version that samples allocations periodically
- Lesson 1884 — Opening DevTools Memory Profiler
- Almost always use `===`
- Loose equality's conversions create confusing bugs.
- Lesson 54 — Equality vs Identity: == and ===
- Altering behavior
- If a function previously returned a number but now returns a string, downstream code may fail.
- Lesson 2519 — MAJOR: Breaking Changes
- always
- returns the exact mathematical result, including decimals:
- Lesson 235 — Multiplication and Division OperatorsLesson 442 — Map Always Returns a New ArrayLesson 839 — Array Constructor vs Array.ofLesson 1207 — setTimeout vs setImmediate (Node.js)Lesson 1330 — What Makes a Function AsyncLesson 1391 — Swallowing Errors with Empty CatchLesson 1542 — File Extension ConventionsLesson 1638 — toISOString() Always Returns UTC (+2 more)
- Always call `callback()`
- when done, or `callback(error)` if something fails
- Lesson 1565 — Implementing the _transform Method
- Always return the accumulator
- so it carries forward to the next iteration
- Lesson 864 — Building Objects with Reduce
- Analogy
- It's like a box that can hold toys one minute and books the next—the box doesn't care what's inside.
- Lesson 6 — JavaScript's Key CharacteristicsLesson 26 — Executing JavaScript Files with NodeLesson 186 — String Length and Surrogate PairsLesson 240 — Operator Overloading: The + String CaveatLesson 323 — The Default ClauseLesson 438 — First-Class Functions vs Other LanguagesLesson 635 — Property Attributes: Writable, ConfigurableLesson 671 — Factory Functions vs Constructor Functions (+15 more)
- Anchors with assertions
- Lesson 1719 — Combining Multiple Assertions
- Angular
- Keeping RxJS subscriptions alive after `ngOnDestroy`, especially when subscribing directly without the `async` pipe.
- Lesson 1881 — Memory Leak Patterns in Frameworks
- Animation drops
- Frame rates plummet below 60fps
- Lesson 2191 — Main Thread Blocking and User Experience
- anonymous
- and stored in the variable `greet`.
- Lesson 381 — Function ExpressionsLesson 1228 — Anonymous vs Named Callbacks
- anonymous function
- is simply a function without a name.
- Lesson 382 — Anonymous FunctionsLesson 1228 — Anonymous vs Named Callbacks
- Another Pitfall
- Accidentally using `+=` when you meant `=`:
- Lesson 252 — Common Assignment Patterns and Pitfalls
- any
- valid Unicode character, including those that require surrogate pairs.
- Lesson 189 — String.fromCodePoint vs String.fromCharCodeLesson 466 — The Every Method: Testing All ElementsLesson 733 — Constructor Functions vs Regular FunctionsLesson 884 — Performance Characteristics and Use CasesLesson 1280 — Where .catch() Catches ErrorsLesson 1316 — Comparing any, race, all, and allSettledLesson 1355 — Catching Multiple Awaits in One BlockLesson 1767 — Writing a Generic Curry Helper (+3 more)
- any iterable
- , not just arrays.
- Lesson 924 — Destructuring with IterablesLesson 1081 — Array.from with Iterables
- Any key type
- Use objects, functions, numbers—anything—as keys without conversion
- Lesson 1065 — Object vs Map: When Objects Fall Short
- any one
- of them fulfills.
- Lesson 1314 — Promise.any: First Fulfillment WinsLesson 1328 — Promise.all and Error Short-CircuitingLesson 1973 — Understanding Promise.any
- Any type as keys
- Use numbers, objects, functions, or even other Maps as keys without conversion
- Lesson 1031 — What is a Map and Why Use It?
- API calls on input
- Send search requests every 300ms while typing, preventing request spam
- Lesson 2387 — What Throttle Solves
- API design
- Are these function signatures intuitive for other developers?
- Lesson 2603 — Automation vs. Human Judgment
- API Responses
- Lesson 1945 — Common Optional Chaining PatternsLesson 2632 — Why Runtime Validation Matters
- Apple-optimized
- Built specifically to run efficiently on Apple hardware (iPhones, iPads, Macs)
- Lesson 12 — JavaScriptCore: Safari's Engine
- Apply the correct sign
- Lesson 2227 — Common Patterns: Calculating Time Differences
- Arabic
- has *six* plural forms depending on the number (0, 1, 2, 3-10, 11-99, 100+)
- Lesson 2228 — Understanding Pluralization Across Languages
- Architecture decisions
- Whether a function should be split up or combined
- Lesson 2603 — Automation vs. Human Judgment
- arguments
- as the information you write into those slots.
- Lesson 403 — Parameters vs Arguments: The DifferenceLesson 1516 — Security and Best Practices
- Arity
- is the number of arguments a function expects.
- Lesson 483 — Composition with Arity and CurryingLesson 1771 — Arity and Curry Depth
- Arrange/Given
- Set up the preconditions and inputs
- Lesson 2669 — Test Organization Patterns: AAA and Given-When-Then
- array
- – The entire original array being filtered
- Lesson 446 — Filter's Callback ParametersLesson 454 — The Reducer Function SignatureLesson 682 — The Replacer ParameterLesson 851 — Map's Callback ParametersLesson 861 — Reduce Signature: Accumulator, Current, Index, ArrayLesson 882 — Callback Parameters: element, index, arrayLesson 923 — Destructuring Strings as IterablesLesson 1054 — When to Use Sets vs Arrays (+3 more)
- Array Access
- Lesson 1945 — Common Optional Chaining Patterns
- Array handling
- Check if both are arrays, compare lengths, then recurse on each element
- Lesson 2406 — Recursive Deep Equality Algorithm
- array of objects
- , each representing one piece of the formatted output.
- Lesson 2206 — formatToParts() for Custom RenderingLesson 2215 — FormatToParts for Granular Access
- Array of paths
- means "only these files have side effects; everything else is safe to tree shake.
- Lesson 2469 — Side Effects and 'sideEffects' Field
- Array-likes
- are objects that have a `length` property and numbered indices (like `{0: 'a', 1: 'b', length: 2}`), but *don't* necessarily have `Symbol.
- Lesson 1083 — Iterators vs Array-likes
- Arrays
- You can only destructure iterables.
- Lesson 936 — Failed Destructuring and ErrorsLesson 1937 — What Is Optional Chaining?
- arrow functions
- , and **object methods**.
- Lesson 1331 — Async Function SyntaxLesson 1770 — Currying with Arrow Functions
- Ask yourself
- Does removing the label require significantly more complex code (flags, extra functions)?
- Lesson 334 — When Labels Improve Readability vs Create ConfusionLesson 2606 — The Cost of Configuration
- Assert/Then
- Verify the outcome matches expectations
- Lesson 2669 — Test Organization Patterns: AAA and Given-When-Then
- Asset integration
- They handle CSS, images, and other resources
- Lesson 2453 — What is a bundler and why do we need one?
- Assign them to variables
- Lesson 427 — What Makes Functions First-Class
- assignment
- or **other ternaries** without clear grouping:
- Lesson 231 — Ternary Operator PrecedenceLesson 245 — Basic Assignment with =
- Associativity
- is the rule that determines whether operators group from left-to-right or right-to-left when they share the same precedence level.
- Lesson 271 — Associativity: Left-to-Right vs Right-to-Left
- Async + modern
- use promises/async-await with try/catch
- Lesson 1169 — Choosing the Right Error Strategy
- Async callbacks
- execute later, after the current code finishes:
- Lesson 1231 — Callback Pattern Summary
- async generator
- is a special function that combines two powerful features you already know:
- Lesson 2038 — What Are Async Generators?Lesson 2039 — Async Generator Syntax
- Async generators
- returned by built-in functions (though these are technically user-created)
- Lesson 2027 — Built-in Async IterablesLesson 2048 — Async Generators vs Promise Arrays
- async iterable
- .
- Lesson 2019 — What Symbol.asyncIterator RepresentsLesson 2038 — What Are Async Generators?
- async iterator
- an object with a `next()` method that returns a *promise* which resolves to `{value, done}`.
- Lesson 2019 — What Symbol.asyncIterator RepresentsLesson 2039 — Async Generator Syntax
- Async/await
- hides the Promise machinery, making code look synchronous.
- Lesson 1338 — Async Functions vs Promise ChainsLesson 2038 — What Are Async Generators?
- asynchronous
- .
- Lesson 1377 — Module Loading and Execution OrderLesson 1479 — ResizeObserver and MutationObserverLesson 2168 — PostMessage Overview: Sending Data Between Contexts
- Asynchronous callbacks
- are different: they're stored by the JavaScript environment and invoked *later*, after some event occurs (like a timer finishing or data arriving).
- Lesson 1224 — Asynchronous CallbacksLesson 1225 — Callback Execution Context
- Asynchronous coordination
- Operations like `setTimeout`, event listeners, and file reading use callbacks to handle results that arrive later
- Lesson 1231 — Callback Pattern Summary
- asynchronous iteration
- using `for-await-of`.
- Lesson 1020 — Symbol.asyncIterator for Async IterationLesson 2020 — Async Iteration vs Sync Iteration
- Asynchronous with callbacks (async)
- Uses callback functions, allowing code to continue executing
- Lesson 1517 — FS Module Overview: Sync vs Async vs Promises API
- at least one
- of the corresponding bits is `1`.
- Lesson 256 — Bitwise OR (|)Lesson 469 — The Some Method: Testing Any Element
- At least one string
- Convert everything to text and glue together.
- Lesson 275 — String Coercion with the + Operator
- At the call-site
- Lesson 556 — Debugging 'this' with Console Logging
- Audio/video processing
- Multiple workers processing different chunks of the same audio buffer in real-time
- Lesson 2189 — When SharedArrayBuffer Makes Sense
- Audit accuracy
- `npm audit` checks precise versions, not vague ranges
- Lesson 2507 — Audit and Security in Dependencies
- Audit Trails and Reporting
- Lesson 1313 — Use Cases for allSettled
- author
- , or **publication year**.
- Lesson 900 — Sorting Objects by PropertyLesson 2485 — npm init and Creating package.jsonLesson 2492 — npm search and Finding Packages
- Authorization
- Sends credentials or tokens to prove your identity to the server.
- Lesson 2262 — Setting Request HeadersLesson 2282 — Common HTTP Headers
- Autocomplete
- Type a variable followed by a dot, and see all available properties
- Lesson 2648 — Editor Experience with JSDoc
- Autocomplete example concept
- Lesson 2141 — Event Streams and Complex User Interactions
- Automatic Help
- Yargs generates `--help` text from your configuration, so users can discover what your tool does without reading external docs.
- Lesson 1514 — Advanced Parsing with yargs
- Automatic Promise wrapping
- Whatever you return gets wrapped in a resolved Promise.
- Lesson 1330 — What Makes a Function Async
- Automatic propagation
- When new data arrives, all dependent computations and effects update automatically
- Lesson 2142 — Real-Time Data and Live Updates
- Avoid
- `for.
- Lesson 359 — For...of vs For...in: Key DifferencesLesson 1713 — Negative Lookahead Syntax (?!...)
- Avoid for arrays
- it iterates keys as strings, not predictable order
- Lesson 361 — When to Use Each Loop Type
- Avoid it
- in request handlers or repeated operations—blocking code during runtime freezes your entire server!
- Lesson 1519 — Reading Files Synchronously with fs.readFileSync()
- Avoid it when
- Lesson 1383 — When to Use vs Avoid Top-Level Await
- Avoid the `delete` operator
- Deleting properties forces shape transitions that de-optimize code.
- Lesson 1917 — Practical Takeaways for Hidden Classes
- Avoid user-controlled patterns
- never pass raw user input to `new RegExp()`
- Lesson 1740 — ReDoS and Security
- Avoiding deep inheritance chains
- – Inheritance couples tightly; mixins compose loosely
- Lesson 1813 — When to Choose Mixins
- Await eligibility
- Only inside an `async` function can you use the `await` keyword (which you'll learn about next).
- Lesson 1330 — What Makes a Function Async
B
- Babel
- to convert logical assignment operators into equivalent ES5 code.
- Lesson 1963 — Browser and Node Support Considerations
- backpressure
- the stream is pushing back, signaling "slow down!
- Lesson 1557 — Handling Write BackpressureLesson 1575 — What is Backpressure?Lesson 1577 — The write() Return Value
- Bad (unnecessary wrapping)
- Lesson 1274 — When to Use the Constructor
- Base cases first
- If both values are primitives or identical references, compare with `===`
- Lesson 2406 — Recursive Deep Equality Algorithm
- Base64 encoding
- converts binary data into a text string using only 64 safe, printable ASCII characters: `A-Z`, `a-z`, `0-9`, `+`, and `/` (plus `=` for padding).
- Lesson 2353 — What is Base64 and Why It Exists
- Base64url
- (also called "URL-safe Base64") solves this by making two simple substitutions:
- Lesson 2361 — URL-Safe Base64 Variants
- Basic Multilingual Plane (BMP)
- is Unicode's first 65,536 characters (code points U+0000 to U+FFFF).
- Lesson 185 — Surrogate Pairs and the BMP
- Basic structure
- Lesson 1259 — The Async.parallel Pattern
- Basic syntax
- Lesson 161 — match(): Extracting Pattern Matches
- Batch processing
- where you want to know which items succeeded and which failed
- Lesson 1317 — allSettled for Independent Operations
- batching
- all promise resolutions that happen during the current synchronous execution get processed together, in order, before any other async work.
- Lesson 1202 — Why Microtasks ExistLesson 2123 — Batching and Glitch-Free Updates
- Batching updates
- Collect multiple state changes, then apply them all at once
- Lesson 519 — Callback Queues
- Be specific and actionable
- Lesson 1150 — Best Practices for Throwing Errors
- Before (anonymous)
- Lesson 1254 — Naming Callbacks for Clarity
- Before (inefficient)
- Lesson 372 — Minimizing Work Inside the Loop Body
- Before (promise chains)
- Lesson 2264 — Async/Await with Fetch
- Before (verbose)
- Lesson 1788 — Simple Point-Free Conversions
- Before decorators
- , you had to manually bind methods in the constructor (`this.
- Lesson 2097 — Binding 'this' Automatically
- beginning
- Lesson 170 — Trimming Whitespace with trim, trimStart, and trimEndLesson 177 — Padding Strings with padStart and padEnd
- Behaviors
- unique to each object (a car's `drive()` method uses *that car's* speed)
- Lesson 789 — Static vs Instance: When to Use Each
- Best practice
- Explicit function calls are more maintainable
- Lesson 719 — Why __proto__ Is Deprecated in Modern Code
- Better approach
- Lesson 1137 — Common Try/Catch Antipatterns
- better error messages
- and **self-referencing capability**.
- Lesson 434 — Named vs Anonymous CallbacksLesson 2681 — Custom Matchers
- Better performance
- Maps are optimized for frequent additions and deletions
- Lesson 1031 — What is a Map and Why Use It?Lesson 2451 — Environment Variables and Build-Time Constants
- Better stack traces
- When an error occurs, the function's name appears in error messages instead of "anonymous function," making debugging much easier.
- Lesson 383 — Named Function Expressions
- Between different task sources
- , priority may vary by browser implementation.
- Lesson 1199 — Task Queue Priority and Order
- Between two word characters
- (inside a word): `a|p|ple` (the pipes show `\B` positions)
- Lesson 1693 — Non-Word Boundaries: \B
- Bidirectional
- Both sides can send and receive
- Lesson 2168 — PostMessage Overview: Sending Data Between Contexts
- Big-endian
- Most significant byte first (like reading left-to-right in English)
- Lesson 2329 — Byte Order and EndiannessLesson 2339 — Endianness in DataView
- BigInt
- very large integers beyond Number's limit
- Lesson 31 — The Seven Primitive TypesLesson 1972 — When to Use BigInt vs Number
- binary
- (base 2), and many decimal numbers that look simple to us cannot be represented exactly in binary.
- Lesson 115 — Floating-Point Representation BasicsLesson 1965 — Numeric Separators in Different Bases
- Binary I/O Optimization
- When reading from or writing to files, network streams, or WebGL buffers, typed arrays map directly to the underlying binary representation.
- Lesson 2330 — Performance Characteristics
- Binary transfer is supported
- Modern APIs (Fetch with ArrayBuffer, file uploads with FormData, WebSocket binary frames) handle raw binary efficiently
- Lesson 2360 — Base64 Overhead and When to Avoid It
- Binds
- `this` inside `MyConstructor` to that new object
- Lesson 552 — The 'new' Keyword and Constructor Calls
- Bitwise floor
- Lesson 1902 — Micro-Optimizations That Don't Matter
- Bitwise operators
- are special operators that work at the lowest level of how computers store numbers: as sequences of 1s and 0s (binary).
- Lesson 253 — What Are Bitwise Operators?
- Bitwise XOR operator (`^`)
- compares two numbers bit-by-bit and returns a result where each bit is `1` if the corresponding bits in the two operands are *different*, and `0` if they're the *same*.
- Lesson 257 — Bitwise XOR (^)
- Blob
- sends raw binary data like images or PDFs:
- Lesson 2270 — Request Body and Body TypesLesson 2284 — Request Body Basics
- Blob and File objects
- Lesson 2151 — What Data Can Be Transferred?
- block
- is any section of code wrapped in curly braces.
- Lesson 80 — Block Scope BasicsLesson 81 — Blocks vs Functions
- block scope
- (created by blocks) only affects `let` and `const` variables.
- Lesson 81 — Blocks vs FunctionsLesson 313 — Block Scope in If StatementsLesson 489 — Block Scope with Let and Const
- Block suppression
- Lesson 2591 — Disabling Rules Inline with Comments
- block-scoped
- meaning it only exists within the curly braces `{}` where it's defined.
- Lesson 67 — Declaring Variables with letLesson 80 — Block Scope Basics
- blocking
- behavior because each operation blocks (prevents) the next one from starting until it finishes.
- Lesson 1170 — What 'Synchronous' Means in JavaScriptLesson 1519 — Reading Files Synchronously with fs.readFileSync()
- Blocking behavior
- `require()` freezes your program until loading completes.
- Lesson 1429 — Dynamic Import vs require()
- Blocks
- are like rooms in a building — `let` and `const` can't leave the room they're declared in
- Lesson 81 — Blocks vs Functions
- Body methods
- like `json()`, `text()`, `blob()` to extract the actual data
- Lesson 2256 — The Response Object
- Boolean
- true or false
- Lesson 31 — The Seven Primitive TypesLesson 34 — Boolean: true and falseLesson 63 — Relational Operators: <, >, <=, >=Lesson 192 — The Boolean Type and Its Two ValuesLesson 280 — ToString Abstract Operation
- Boolean flags
- like `--verbose` become `true` automatically
- Lesson 1513 — Argument Parsing Libraries: minimist
- Borrowing methods
- You want to use one object's method on a different object temporarily
- Lesson 557 — Why Manual 'this' Binding Exists
- both
- the right badge type AND the right ID number.
- Lesson 55 — How === Works: Type and ValueLesson 170 — Trimming Whitespace with trim, trimStart, and trimEndLesson 504 — Closures Over ParametersLesson 505 — Nested ClosuresLesson 607 — Checking Own Properties with hasOwnPropertyLesson 1653 — When to Use Intl vs Third-Party LibrariesLesson 1989 — Accessing Private Fields from WithinLesson 2039 — Async Generator Syntax (+3 more)
- Both parameters are optional
- , but they give you fine-grained control over formatting.
- Lesson 2199 — Creating a NumberFormat Instance
- Bracket access later
- Use when you need to read/write properties *after* the object exists
- Lesson 624 — When to Use Computed vs Dot/Bracket Access
- bracket notation
- with a computed property name, like `obj['greet']()`?
- Lesson 553 — Method Calls on Computed PropertiesLesson 601 — Dot Notation vs Bracket NotationLesson 603 — Adding Properties to Existing ObjectsLesson 624 — When to Use Computed vs Dot/Bracket AccessLesson 801 — Reading Elements with Bracket NotationLesson 931 — Computed Property Names in DestructuringLesson 1004 — Symbols as Object KeysLesson 1007 — Retrieving Symbol Properties (+2 more)
- Branch Coverage
- measures whether your tests take both paths through conditional statements.
- Lesson 2716 — What Code Coverage MeasuresLesson 2718 — Reading Coverage ReportsLesson 2719 — Branch Coverage vs Line Coverage
- brand new array
- .
- Lesson 440 — Array.prototype.map: The BasicsLesson 641 — Object.keys() for Own Enumerable String KeysLesson 835 — toSpliced() for Immutable Splicing
- Breaking it down
- Lesson 1716 — Password Validation with Lookaheads
- Breakpoints work
- as if you were running unbundled code
- Lesson 2480 — Using Source Maps in Browser DevTools
- Breaks assumptions
- You think variables are independent when they're not
- Lesson 52 — Pitfall: Unintended Shared State
- bridge
- that makes inheritance work.
- Lesson 717 — Instance __proto__ Points to Constructor.prototypeLesson 1582 — What is a Buffer?
- Browser APIs are sufficient
- The built-in `Intl` APIs (`NumberFormat`, `DateTimeFormat`, `RelativeTimeFormat`, `ListFormat`, etc.
- Lesson 2247 — Identifying Simple i18n Requirements
- Browser caching
- External files can be cached, making your site faster for returning visitors
- Lesson 23 — External JavaScript Files
- browser runtime
- is the complete environment where your code runs, and it includes the engine *plus* a collection of powerful tools called **Web APIs**.
- Lesson 17 — Browser Runtime: DOM and Web APIsLesson 18 — Node.js Runtime: Server-Side JavaScriptLesson 20 — Why Runtime Differences Matter
- Browsers
- implement their own event loop as part of the JavaScript engine integration.
- Lesson 1218 — Event Loop in Node vs BrowserLesson 1325 — Silent Failures: The Missing Catch TrapLesson 1380 — Browser vs Node.js Support
- Buffering begins
- Incoming chunks pile up in an internal buffer
- Lesson 1576 — How Backpressure Works Internally
- Build artifacts
- `dist/`, `build/`, `out/` contain compiled code that will be regenerated anyway
- Lesson 2579 — Ignoring Files with .prettierignore
- Build slowdowns
- More rules mean longer lint times in CI/CD pipelines
- Lesson 2606 — The Cost of Configuration
- Building data structures
- Implementing stacks or queues often uses `push()` and `shift()` for efficiency.
- Lesson 837 — When to Prefer Non-Mutating Methods
- Building domain-specific data structures
- that should behave naturally with language features (custom collections, special numeric types)
- Lesson 1022 — When to Use Well-Known Symbols
- Building pipelines
- Chain multiple transformations (`map`, `filter`) without creating intermediate arrays
- Lesson 1127 — When to Choose Lazy vs. Eager
- Building predictable functions
- Functions that don't mutate their inputs are easier to test, reason about, and reuse.
- Lesson 837 — When to Prefer Non-Mutating Methods
- Built-in assertions
- Jest includes `expect()` with dozens of matchers (`toBe()`, `toEqual()`, `toContain()`, etc.
- Lesson 2655 — Jest: The All-in-One Runner
- Built-in types
- `Date`, `RegExp`, `Map`, `Set`, `ArrayBuffer`, `TypedArray`, `DataView`, `Blob`, `File`
- Lesson 2004 — What structuredClone Can and Cannot Clone
- Built-in TypeScript support
- Lesson 2528 — Yarn Classic vs Yarn Berry (v2+)
- Bundle Node's `EventEmitter`
- via a package like `eventemitter3` or `events` polyfill
- Lesson 2423 — Node.js EventEmitter vs Custom Implementations
- Bundle Size Budgets
- "Total JavaScript must be under 200KB gzipped"
- Lesson 1932 — Setting Performance Budgets
- Bundler
- packages the transformed code into output files
- Lesson 2445 — Transpilation for Browser CompatibilityLesson 2453 — What is a bundler and why do we need one?
- Business logic correctness
- Does this discount calculation match requirements?
- Lesson 2603 — Automation vs. Human Judgment
- byte offset
- (where to start) and a **length** (how many elements to include).
- Lesson 2323 — Creating Typed Arrays from ArrayBufferLesson 2338 — Writing with DataView Set Methods
C
- Cache-Control
- When freshness matters (or when debugging cache issues)
- Lesson 2282 — Common HTTP Headers
- Cacheable
- Store results because they never change
- Lesson 1742 — Deterministic Output: Same Inputs, Same Results
- Caching
- means storing that value once before the loop starts:
- Lesson 373 — Caching Array Length in For LoopsLesson 1899 — Caching and Memoization for Repeated Work
- Caching array length
- Lesson 1902 — Micro-Optimizations That Don't Matter
- Caching DOM element metadata
- WeakMap (allows GC)
- Lesson 1072 — Decision Framework: Choosing the Right Collection
- Caching metadata
- about DOM elements that might be removed from the page
- Lesson 1062 — Memory Management Benefits
- Calculating distance or difference
- Lesson 137 — Math.abs for Absolute Values
- call
- it as many times as needed by writing its name followed by `()`.
- Lesson 379 — Function Declaration SyntaxLesson 380 — Calling Functions and Return Values
- Call count matchers
- Verify exactly how many times a mock was invoked:
- Lesson 2704 — Assertion Matchers for Mocks
- call site
- (where you actually invoke the method) determines the context, not where the method was defined.
- Lesson 649 — How 'this' Works in Method CallsLesson 1910 — Monomorphic vs Polymorphic SitesLesson 1914 — When V8 Inlines Functions
- call stack
- is JavaScript's internal to-do list for functions.
- Lesson 1181 — What is the Call Stack?Lesson 1213 — The Event Loop Flow Diagram
- callback
- is simply a function that you pass as an argument to another function, with the expectation that it will be invoked (called back) at some point in the future.
- Lesson 1221 — What is a Callback?Lesson 1231 — Callback Pattern SummaryLesson 1520 — Writing Files with fs.writeFile()Lesson 1555 — Creating a Writable Stream
- Callback Hell
- (also called the "Pyramid of Doom") occurs when you nest multiple asynchronous callbacks inside each other.
- Lesson 1242 — What is Callback Hell?
- Callback-based async
- is like giving them your number and continuing your day—they'll call when ready.
- Lesson 1517 — FS Module Overview: Sync vs Async vs Promises API
- Callbacks
- You pass a method to `setTimeout`, `addEventListener`, or an array method, and `this` becomes undefined or global
- Lesson 557 — Why Manual 'this' Binding ExistsLesson 2424 — Event Emitter Use Cases and Alternatives
- Calls the `Symbol.iterator` method
- on the collection to get an iterator
- Lesson 1077 — Consuming Iterators with for...of
- cannot
- mix BigInt and Number in operations:
- Lesson 129 — BigInt Arithmetic OperationsLesson 297 — NaN's Unique InequalityLesson 399 — Arrow Functions Cannot Be ConstructorsLesson 409 — Default Parameters Can Reference Earlier ParametersLesson 693 — Deep Clone with structuredCloneLesson 755 — Comparing Class Syntax to Constructor FunctionsLesson 791 — Private MethodsLesson 1394 — Not Propagating Async Through Call Stack (+6 more)
- Cannot use reserved keywords
- words like `let`, `const`, `var`, `if`, `function`, etc.
- Lesson 69 — Variable Naming Rules
- Canvas API
- provides a drawable surface for creating graphics, animations, games, and data visualizations programmatically using JavaScript.
- Lesson 1494 — Web APIs Beyond the DOM
- Capital letter convention
- Classes typically start with a capital letter (like `Person`, not `person`)
- Lesson 745 — Declaring a Class with the class Keyword
- Cardinal plurals
- count quantities: "1 apple," "2 apples," "5 apples"
- Lesson 1661 — Ordinal vs Cardinal PluralsLesson 2231 — Cardinal vs Ordinal Plurals
- caret
- (`^`) for most dependencies—you want security patches and new features.
- Lesson 2523 — Version Ranges in package.jsonLesson 2524 — Caret (^) vs Tilde (~) Ranges
- Caret (`^`)
- The default.
- Lesson 2523 — Version Ranges in package.jsonLesson 2524 — Caret (^) vs Tilde (~) Ranges
- Case-sensitive
- `myVar`, `MyVar`, and `MYVAR` are three different variables
- Lesson 69 — Variable Naming RulesLesson 156 — includes(): Checking for SubstringsLesson 157 — startsWith() and endsWith()Lesson 158 — indexOf(): Finding the First OccurrenceLesson 1723 — Case- Insensitive Matching with 'i'
- Chain multiple array methods
- Lesson 398 — Arrow Functions with Array Methods
- chaining
- .
- Lesson 443 — Chaining Map OperationsLesson 461 — Chaining Operations vs Single ReduceLesson 1821 — Functional Mixins
- Chaining (concatenation)
- iterate through the first iterable completely, then the second, then the third, etc.
- Lesson 1094 — Combining Multiple Iterators
- Chaining Assignments
- Lesson 252 — Common Assignment Patterns and PitfallsLesson 269 — Assignment Has Lowest Precedence
- Chaining becomes elegant
- Lesson 449 — Map and Filter with Arrow Functions
- Change severity
- from `"error"` to `"warn"` (or vice versa)
- Lesson 2569 — Overriding Rules in Extended Configs
- Changing function signatures
- Removing parameters, reordering them, or changing return types can break existing usage.
- Lesson 2519 — MAJOR: Breaking Changes
- character classes
- come in.
- Lesson 1677 — Character Classes with Square BracketsLesson 1688 — Common Quantifier Pitfalls
- Cheap functions
- where lookup overhead exceeds computation time
- Lesson 2378 — When Memoization Helps Performance
- Check
- the microtask queue — run ALL microtasks
- Lesson 1213 — The Event Loop Flow DiagramLesson 1218 — Event Loop in Node vs Browser
- Check before using
- Lesson 1999 — Browser and Node Support
- Check consistency
- Does it happen for all users, or just some configurations?
- Lesson 1930 — Identifying Real Performance Problems
- Check for Updates
- Lesson 2506 — Dealing with Peer Dependency Conflicts
- Check global packages
- Lesson 2491 — npm list and Viewing Installed Packages
- Check the condition
- Before anything happens (even the first time), JavaScript evaluates the condition expression
- Lesson 338 — While Loop Execution Flow
- Check the retainer path
- to see what JavaScript variable is holding the reference
- Lesson 1891 — Identifying Detached DOM Nodes
- Choose based on readability
- Lesson 155 — Performance: Concatenation vs Template Literals
- Choose feature-rich bundlers when
- Lesson 2463 — Comparing bundler performance characteristics
- Choose speed-focused bundlers when
- Lesson 2463 — Comparing bundler performance characteristics
- Circular references
- (throw errors)
- Lesson 686 — Deep Cloning with JSONLesson 2005 — structuredClone vs JSON Parse/StringifyLesson 2397 — JSON.parse(JSON.stringify()) MethodLesson 2400 — Handling Circular ReferencesLesson 2403 — Library Solutions: Lodash cloneDeepLesson 2411 — Circular Reference Detection
- CJS
- creates a copy of exported values, while **ESM** creates a live binding—changes in the original module reflect in imports.
- Lesson 1540 — CommonJS require() vs ES Module import
- Clarity
- The double underscores suggest it's internal/private
- Lesson 719 — Why __proto__ Is Deprecated in Modern Code
- Clarity trumps brevity
- If you hesitate even slightly, add parentheses
- Lesson 273 — When to Rely on Precedence vs Parentheses
- Class declarations
- are named and exist in their entire scope, but unlike function declarations, they're **not hoisted** — you can't use them before the line they're declared.
- Lesson 756 — When to Use Class Declarations vs Expressions
- Class expressions
- (named or anonymous) are typically assigned to variables or used immediately, giving you more control over scope and timing.
- Lesson 756 — When to Use Class Declarations vs Expressions
- class itself
- , not to individual instances.
- Lesson 782 — Accessing Static MethodsLesson 783 — Static Methods Cannot Access Instance Properties
- Class Syntax (Equivalent)
- Lesson 755 — Comparing Class Syntax to Constructor Functions
- classes
- for standard object-oriented patterns with clear hierarchies.
- Lesson 731 — When Object.create Is the Right ToolLesson 1804 — Three Approaches to Object CreationLesson 1813 — When to Choose MixinsLesson 1814 — Combining All Three ApproachesLesson 1815 — Trade-offs and Maintainability
- Classes are NOT hoisted
- like function declarations:
- Lesson 745 — Declaring a Class with the class Keyword
- Cleanup and Finalization
- Lesson 1313 — Use Cases for allSettled
- Clear API Boundaries
- Lesson 1983 — Why Private Fields?
- Clear communication
- Signals which properties are stable public API vs implementation details
- Lesson 1829 — Convention-Based Privacy with Underscore Prefix
- Clear version
- Lesson 1798 — Point-Free Style Gone Wrong
- Clearer intent
- The code shows you're extracting specific values
- Lesson 915 — What is Array Destructuring?
- Clears marks
- from surviving objects, preparing for the next garbage collection cycle
- Lesson 1864 — The Sweep Phase
- Click "Take snapshot"
- the page freezes briefly while DevTools records everything
- Lesson 1885 — Taking a Heap Snapshot
- Cloning complex configuration objects
- that will be modified in different contexts
- Lesson 2007 — When to Use structuredClone
- closure
- .
- Lesson 88 — Scope and Closures PreviewLesson 496 — What a Closure Actually IsLesson 517 — Debounce and Throttle FunctionsLesson 1775 — Performance Considerations
- closures
- when you genuinely need to preserve data for the lifetime of your function.
- Lesson 532 — Closures vs Weak ReferencesLesson 540 — When Lexical Binding MattersLesson 1827 — What Encapsulation Means in JavaScriptLesson 1862 — Roots and Reference ChainsLesson 1870 — What Qualifies as a Memory Leak in JavaScript
- Closures holding circular structures
- Lesson 1877 — Circular References in Modern Engines
- code points
- as the actual characters in Unicode's master list.
- Lesson 184 — Code Points vs Code UnitsLesson 190 — Iterating Strings with For...of
- Code Splitting
- Lesson 1422 — When to Use Dynamic ImportsLesson 2444 — Code Splitting and Lazy LoadingLesson 2446 — Dependency ResolutionLesson 2453 — What is a bundler and why do we need one?
- code units
- as the storage boxes JavaScript uses to hold these characters.
- Lesson 184 — Code Points vs Code UnitsLesson 186 — String Length and Surrogate Pairs
- Cognitive load decreases
- No surprises when switching files
- Lesson 2604 — Consistent Style vs. Personal Preference
- Combine with `take()`
- If you've built a lazy `take()` helper, it produces a finite iterator that `for-of` can exhaust naturally.
- Lesson 2057 — Lazy Iterators and For-Of
- Comma operator
- `,` — Evaluates multiple expressions, returns the last
- Lesson 266 — Precedence Levels Overview
- Command-line arguments
- what was typed when your program started
- Lesson 1496 — What is the Process Object?
- Command/Decorator/Proxy
- These are for specialized cases—undo/redo systems (Command), adding behavior without modifying classes (Decorator), or controlling access/adding logging (Proxy).
- Lesson 1850 — When to Use Each Pattern
- Commands
- Structure your CLI with subcommands like `myapp deploy` or `myapp status`, each with their own options.
- Lesson 1514 — Advanced Parsing with yargs
- Common methods
- Lesson 135 — The Math Object and Its Static Methods
- Common scenarios
- Lesson 689 — Why Object Cloning Matters
- Common use case
- Wrapping numbers around a limit (like cycling through array indices or creating repeating patterns).
- Lesson 248 — Remainder and Exponentiation AssignmentLesson 1600 — Math.sqrt and Math.cbrt
- CommonJS
- (the original Node.
- Lesson 1450 — CJS and ESM: Two Module SystemsLesson 1540 — CommonJS require() vs ES Module importLesson 1542 — File Extension Conventions
- CommonJS (CJS)
- the original system using `require()` and `module.
- Lesson 1540 — CommonJS require() vs ES Module import
- CommonJS exports are copies
- when you require a module, you get a snapshot of its exported values at that moment.
- Lesson 1450 — CJS and ESM: Two Module Systems
- CommonJS loads synchronously
- when you call `require()`, Node.
- Lesson 1450 — CJS and ESM: Two Module Systems
- Communication
- they send messages back and forth (like two programs talking via a messenger)
- Lesson 2147 — What Are Web Workers?
- Compact notation
- is perfect for dashboards and social media (showing "2.
- Lesson 2205 — Grouping and Notation Options
- comparator function
- is a callback you pass to `sort()` that tells it how to compare two elements.
- Lesson 819 — sort() with Comparator FunctionsLesson 898 — Writing a Numeric Comparator
- Compare against baselines
- Is 200ms slow for this task?
- Lesson 1930 — Identifying Real Performance Problems
- Compare counts
- between snapshots—if `User` objects grow from 50 to 5,000, you've found your leak
- Lesson 1888 — Filtering by Constructor Name
- Comparison
- view to see what objects were added between snapshots.
- Lesson 533 — Debugging Closure Memory Issues
- Compilation
- means translating *all* the code into machine language *before* running it.
- Lesson 14 — Interpretation vs Compilation
- Complex async coordination
- Scenarios like "wait for three API calls, retry failures, timeout after 5 seconds" become simple operator chains instead of tangled promise logic.
- Lesson 2139 — Identifying Problems Suited for Reactive Patterns
- Complex calendar operations
- (business days, recurring events)
- Lesson 1653 — When to Use Intl vs Third-Party Libraries
- Complex conditional logic
- – When you find yourself with nested `if` statements checking flags like `isLoading && !
- Lesson 2432 — When to Use FSMs in JavaScript
- Complex conditions
- When your condition involves multiple logical operators, wrapping it in a ternary makes it dense:
- Lesson 233 — Ternary Pitfalls and ReadabilityLesson 370 — Loop control best practices and readability
- Complex data structures
- Objects, nested arrays, and most JavaScript types work seamlessly
- Lesson 2179 — PostMessage vs Shared Memory: When to Use Each
- Complex dependency graphs
- Multiple derived values depend on each other
- Lesson 2143 — Derived State and Automatic Recalculation
- Complex Early Termination
- If you need sophisticated cleanup that depends on *how* iteration stopped (break, exception, explicit call to `return()`), custom `return()` methods give you that control.
- Lesson 1095 — When Custom Iterators Beat Generators
- Complex generics
- with multiple type parameters and constraints quickly become unwieldy.
- Lesson 2649 — Limitations: When TypeScript Becomes Necessary
- Composability
- Lesson 1745 — Why Pure Functions MatterLesson 1824 — The Decorator Pattern for Behavior LayeringLesson 1847 — The Decorator Pattern
- compose
- them—take small, single-purpose functions and combine them to create new, more powerful functions.
- Lesson 436 — Composing Behavior with FunctionsLesson 674 — Composition with Factory FunctionsLesson 1777 — What is Function Composition?Lesson 1818 — Composition with Object Literals
- Composition
- means creating functionality by combining simple, focused objects or functions together, rather than forcing objects to inherit behavior from parent classes.
- Lesson 1817 — What Composition MeansLesson 1821 — Functional MixinsLesson 1853 — The Yo-Yo Problem: Navigating Complex HierarchiesLesson 2142 — Real-Time Data and Live UpdatesLesson 2539 — Scripts: Automating Tasks
- Computation savings
- Work stops the moment you have what you need
- Lesson 2061 — Lazy Evaluation Performance Benefits
- Compute
- values on-the-fly (fullName from firstName + lastName)
- Lesson 667 — When to Use Getters/Setters vs Plain PropertiesLesson 1834 — Getters and Setters for Controlled Access
- Compute a single value
- from an array (sum, product, single object)
- Lesson 871 — Reduce Performance Considerations
- Compute values on-the-fly
- instead of storing them
- Lesson 658 — What Are Getters and Setters?Lesson 659 — Defining Getters with the 'get' Keyword
- Computed caching
- Optimize expensive getter calculations by caching results.
- Lesson 2080 — Accessor Decorators (Getters and Setters)
- Computed keys at creation
- Use when you know the dynamic key name *while building* the object
- Lesson 624 — When to Use Computed vs Dot/Bracket Access
- Computed Module Paths
- Lesson 1422 — When to Use Dynamic Imports
- Computed property names
- let you wrap an expression in square brackets `[]` *inside the object literal*, and JavaScript will evaluate that expression to determine the property key.
- Lesson 616 — Computed Property Names with []Lesson 624 — When to Use Computed vs Dot/Bracket Access
- condition
- A boolean expression (or something that converts to boolean)
- Lesson 227 — The Ternary Operator SyntaxLesson 342 — The For Loop StructureLesson 346 — Multiple Variables in For Loops
- Conditional Loading
- Lesson 1422 — When to Use Dynamic Imports
- Conditional types
- where one type determines another based on runtime-like logic (`T extends U ?
- Lesson 2649 — Limitations: When TypeScript Becomes Necessary
- Configuration Objects
- Lesson 1945 — Common Optional Chaining Patterns
- Configuration objects, simple data
- → Shallow often enough
- Lesson 696 — Choosing the Right Clone Strategy
- Confusing `=` with `==`
- Lesson 252 — Common Assignment Patterns and Pitfalls
- Cons
- Slower execution, especially for repeated code
- Lesson 14 — Interpretation vs CompilationLesson 1228 — Anonymous vs Named CallbacksLesson 2477 — Inline vs External Source Maps
- Consider it when
- Lesson 155 — Performance: Concatenation vs Template Literals
- Consider single reduce
- when profiling reveals a bottleneck with very large arrays (tens of thousands+ of elements) or when you're already using reduce for accumulation logic.
- Lesson 461 — Chaining Operations vs Single Reduce
- Consistency
- When you want properties immediately, literals are far cleaner:
- Lesson 599 — Object Literals vs. new Object()Lesson 1141 — What Can Be ThrownLesson 1917 — Practical Takeaways for Hidden ClassesLesson 1994 — at() on Strings and Typed ArraysLesson 2123 — Batching and Glitch-Free UpdatesLesson 2499 — The Purpose of LockfilesLesson 2603 — Automation vs. Human Judgment
- Consistency guarantees
- All derived values must update atomically
- Lesson 2143 — Derived State and Automatic Recalculation
- Constants
- Lesson 135 — The Math Object and Its Static MethodsLesson 789 — Static vs Instance: When to Use Each
- constructor
- when:
- Lesson 1665 — Creating Regex Patterns: Literals vs ConstructorLesson 1805 — Class-Based Object Creation ReviewLesson 1888 — Filtering by Constructor Name
- Constructor Function Pattern
- Lesson 755 — Comparing Class Syntax to Constructor Functions
- Constructor functions
- use the `new` keyword and `this` to initialize objects.
- Lesson 671 — Factory Functions vs Constructor FunctionsLesson 726 — Object.create vs Constructor FunctionsLesson 733 — Constructor Functions vs Regular FunctionsLesson 743 — When to Use 'new' vs Class Syntax
- Content-Type
- Tells the server what format your request body is in (like `application/json` when sending JSON data).
- Lesson 2262 — Setting Request HeadersLesson 2282 — Common HTTP Headers
- Continuous data streams
- Real-time dashboards, live search, auto-save features, and animations benefit from observable streams that handle throttling, debouncing, and cancellation elegantly.
- Lesson 2139 — Identifying Problems Suited for Reactive Patterns
- Control
- You need specific behavior the library doesn't offer
- Lesson 2413 — When to Use Libraries vs Rolling Your Own
- Control access
- (read-only properties via getter without setter)
- Lesson 667 — When to Use Getters/Setters vs Plain Properties
- Controlled access
- Prevent direct modification of internal properties
- Lesson 660 — Defining Setters with the 'set' Keyword
- Controlled interfaces
- Only exposing specific methods/getters/setters
- Lesson 1827 — What Encapsulation Means in JavaScript
- Controlled updates
- You can review security patches before they're applied
- Lesson 2507 — Audit and Security in Dependencies
- Convenient
- You can add optional features later without breaking existing calls
- Lesson 406 — Too Many Arguments: Extra Values
- Convention
- Every style guide and experienced developer uses literals.
- Lesson 599 — Object Literals vs. new Object()Lesson 1827 — What Encapsulation Means in JavaScript
- Coordinated Releases
- If your packages always release together or follow lockstep versioning (like a design system with components, themes, and utilities), a monorepo simplifies the release process.
- Lesson 2552 — When a Monorepo Makes Sense
- copied by value
- ?
- Lesson 45 — Objects Store References, Not ValuesLesson 53 — When Primitives Behave Differently
- CORS applies
- Module files must be served from the same origin (or with proper CORS headers)
- Lesson 1408 — Type='module' in HTML
- CPU Cache Efficiency
- Contiguous memory means better CPU cache utilization.
- Lesson 2330 — Performance Characteristics
- Create a trigger function
- – Wrap the leaky behavior in a function you can call repeatedly
- Lesson 1894 — Reproducing Leaks Systematically
- Creates
- a brand-new empty object
- Lesson 552 — The 'new' Keyword and Constructor CallsLesson 2486 — Installing Packages with npm install
- Creates tight coupling
- where children can't exist without their entire ancestry
- Lesson 1852 — Inheritance Hierarchies That Are Too Deep
- Creating test fixtures
- where each test needs pristine, unshared data
- Lesson 2007 — When to Use structuredClone
- Critical caveat
- If the BigInt is larger than `Number.
- Lesson 132 — BigInt Type Checking and Conversion
- Critical detail
- You must wrap the function call in an arrow function.
- Lesson 2679 — Exception Assertions
- Critical invariants
- Internal state that, if modified externally, would break your object's integrity
- Lesson 1991 — When to Use Private Fields
- Cross-project consistency
- Your team runs `npm test` whether you're using Jest, Mocha, or any other tool—the implementation is hidden behind the interface.
- Lesson 2539 — Scripts: Automating Tasks
- Crucially
- The position in the string doesn't advance—you're still at the same spot
- Lesson 1712 — Positive Lookahead Syntax (?=...)
- CSS
- May be injected into the page via a `<style>` tag at runtime, extracted into a separate `.
- Lesson 2448 — Asset Pipeline IntegrationLesson 2583 — Prettier for More Than JavaScript
- CSS styling
- deeply—the three form an inseparable trio.
- Lesson 1495 — Where to Learn More About Web Development
- cube root
- (the number that, when cubed, equals x)
- Lesson 142 — Math.sqrt and Math.cbrt for RootsLesson 1600 — Math.sqrt and Math.cbrt
- Curly braces `{}`
- Contain the function body—the code to execute
- Lesson 379 — Function Declaration SyntaxLesson 394 — Arrow Functions with Block BodiesLesson 589 — What is an Object Literal?
- current
- Lesson 861 — Reduce Signature: Accumulator, Current, Index, ArrayLesson 866 — Flattening Arrays with ReduceLesson 2484 — Installing Node.js and NPMLesson 2493 — npm outdated and Version Checking
- current state
- of the array.
- Lesson 803 — The Length PropertyLesson 2426 — State and Transition Vocabulary
- Current value
- – the array element being processed right now
- Lesson 860 — Understanding Reduce: The Swiss Army Knife of Array Methods
- Current working directory
- where your program is running from
- Lesson 1496 — What is the Process Object?Lesson 1499 — Process.cwd() and Process.chdir()
- Currying
- is a functional programming technique that converts a function taking multiple arguments into a sequence of functions, each taking a single argument.
- Lesson 1764 — What Is Currying?Lesson 1768 — Currying vs Partial Application
- Custom formatting
- Lesson 685 — ToJSON Method
- Custom parsing
- Process data incrementally before it's fully downloaded
- Lesson 2291 — Accessing the ReadableStream
- Custom properties
- Any additional data attached by the code that created the error
- Lesson 1356 — Extracting Error Information
- Custom separator
- Lesson 828 — join() to Convert Arrays to Strings
- Cycling through values
- Lesson 236 — The Remainder Operator (%)
D
- Dangerous
- Typos or misunderstandings won't produce errors, making bugs harder to spot
- Lesson 406 — Too Many Arguments: Extra Values
- Dangling callbacks
- With callback-based APIs using the `done()` pattern, forgetting to call `done()` or calling it too early can skip assertions.
- Lesson 2692 — Avoiding False Positives with Assertions
- Data collection
- Appending records as they arrive
- Lesson 1521 — Appending to Files with fs.appendFile()
- Data dependency exists
- Operation B needs the result from Operation A
- Lesson 1368 — Choosing Between Sequential and Parallel
- Data is small
- The overhead of generators outweighs memory savings
- Lesson 1127 — When to Choose Lazy vs. Eager
- Database queries
- Retrieving data isn't instantaneous
- Lesson 1174 — Why JavaScript Needs Asynchronous Code
- DataView
- objects (which you've already learned about) to actually interpret and manipulate the binary data stored inside.
- Lesson 2333 — Creating ArrayBuffers
- Date arithmetic
- (adding days, calculating differences)
- Lesson 1653 — When to Use Intl vs Third-Party Libraries
- Dates
- (become strings)
- Lesson 686 — Deep Cloning with JSONLesson 2005 — structuredClone vs JSON Parse/StringifyLesson 2151 — What Data Can Be Transferred?Lesson 2397 — JSON.parse(JSON.stringify()) MethodLesson 2412 — Deep Equality for Dates, RegExp, and Other Built-ins
- DateTimeFormat
- Formats dates according to local conventions (month/day order, separator styles, weekday names)
- Lesson 1643 — What Intl Solves: Beyond Naive Formatting
- Daylight Saving Time (DST)
- Many regions shift their clocks forward in spring and back in autumn.
- Lesson 1640 — Timezone Offset Changes Over Time
- Days
- Divide milliseconds by `86,400,000` (24 × 60 × 60 × 1000)
- Lesson 1629 — Converting Milliseconds to Human-Readable Durations
- Dead code elimination
- – removing unused code paths
- Lesson 2449 — Development vs Production BuildsLesson 2453 — What is a bundler and why do we need one?
- Dead Contexts
- Sending to a terminated worker or closed window fails silently or throws depending on timing:
- Lesson 2177 — Error Handling in Cross-Context Messaging
- Debounce
- and **throttle** are patterns that use closures to track timing state and limit execution frequency.
- Lesson 517 — Debounce and Throttle FunctionsLesson 2094 — Throttle and Debounce DecoratorsLesson 2387 — What Throttle SolvesLesson 2390 — Debounce vs Throttle: When to Use Which
- Debuggable
- Same inputs always trigger the same code path
- Lesson 1742 — Deterministic Output: Same Inputs, Same Results
- Debugging
- Mutation can make it harder to track when and where data changed
- Lesson 810 — What 'Mutating' Means for ArraysLesson 1038 — Map Size PropertyLesson 1153 — Setting the Error Name PropertyLesson 1254 — Naming Callbacks for ClarityLesson 1501 — Process.pid and Process.ppidLesson 2217 — ResolvedOptions to Inspect Settings
- Debugging Made Easier
- If bugs occur, you can trace through your data history like breadcrumbs.
- Lesson 906 — Why Immutability Matters in JavaScript
- Debugging needs
- Want visibility in devtools or during testing
- Lesson 1991 — When to Use Private Fields
- Decimal (no prefix)
- The standard way you're used to:
- Lesson 101 — Number Literals: Decimal, Hex, Octal, Binary
- declarations
- are processed before any code executes.
- Lesson 90 — What is Hoisting?Lesson 381 — Function ExpressionsLesson 384 — Declaration vs Expression: Hoisting Behavior
- Declarative cleanup
- Unsubscribing automatically tears down connections and clears listeners
- Lesson 2142 — Real-Time Data and Live Updates
- Decorators
- are a way to **augment** (modify or enhance) classes, methods, properties, and other class members by attaching metadata or wrapping them with additional behavior—**without editing their original code**.
- Lesson 2067 — What Decorators Are and Why They Exist
- Deduplication
- means npm identifies when multiple packages require compatible versions of the same dependency.
- Lesson 2505 — Dependency Hoisting and Deduplication
- deep clone
- .
- Lesson 686 — Deep Cloning with JSONLesson 913 — Deep Cloning Nested ArraysLesson 979 — Common Object Spread PitfallsLesson 1757 — Deep Cloning with structuredClone
- deep cloning
- whenever your object contains:
- Lesson 692 — The Deep Clone ProblemLesson 696 — Choosing the Right Clone StrategyLesson 2395 — Why Deep Clone?
- deep copy
- using the **structured clone algorithm**.
- Lesson 2151 — What Data Can Be Transferred?Lesson 2161 — Structured Clone for Message PassingLesson 2171 — The Structured Clone AlgorithmLesson 2396 — Shallow vs Deep Copy
- Deep dependency chains
- A changes B, B changes C, C changes D
- Lesson 2143 — Derived State and Automatic Recalculation
- Deep equality
- compares the *contents* of objects recursively, not just their references.
- Lesson 2405 — Why Deep Equality Is NeededLesson 2673 — Basic Equality Assertions
- Default behavior
- If you omit the second parameter, DataView uses **big-endian** (network byte order).
- Lesson 2339 — Endianness in DataView
- Default Binding
- What happens when none of the other rules apply (the fallback case)
- Lesson 538 — The Four Binding Rules Preview
- default exports
- .
- Lesson 1411 — Default Export SyntaxLesson 1417 — When to Use Named vs DefaultLesson 1419 — Community ConventionsLesson 1543 — Named Exports and Default Exports in ESMLesson 2468 — Export Patterns That Enable Tree Shaking
- Default to readable code
- Unless you're in a hot path *and* you've measured a problem, write for the next developer first.
- Lesson 1936 — Building a Performance Culture Without Obsession
- Default values
- Return a sensible default when data can't be loaded
- Lesson 1281 — Recovering from Errors with .catch()Lesson 1514 — Advanced Parsing with yargs
- Default values or normalization
- Automatically clean or format data as objects are created, keeping your constructor logic clean and declarative.
- Lesson 2073 — Field Decorators
- Defined transitions
- Clear rules for moving between states
- Lesson 2425 — What Is a Finite-State Machine?
- Defining object methods
- – When you *want* `this` to refer to the object itself at call-time:
- Lesson 578 — When to Choose Arrow vs Regular Functions
- delegate
- to another iterable (like an array, string, or another generator).
- Lesson 1113 — The yield* Operator: Delegating to Another IterableLesson 1823 — Composition with Classes
- DELETE
- – Remove data (like removing a book from the library)
- Lesson 2268 — Request Methods and HTTP Verbs
- Deletes `node_modules` entirely
- before installing (always starts fresh)
- Lesson 2494 — npm ci for Reproducible Installs
- Deno
- and **Bun** are newer runtimes built to address some of Node.
- Lesson 19 — Deno and Bun: Alternative Runtimes
- Deno runtime
- has different security permissions and uses URLs for imports
- Lesson 20 — Why Runtime Differences Matter
- Dependencies
- include:
- Lesson 2540 — Dependencies vs DevDependenciesLesson 2579 — Ignoring Files with .prettierignore
- dependency graph
- .
- Lesson 2140 — State Changes with Multiple DependentsLesson 2446 — Dependency Resolution
- Dependency injection
- pass the impure dependencies as arguments instead of calling them directly inside your function.
- Lesson 1750 — Handling External Dependencies Purely
- Dependency Lock-In
- If your project depends on libraries using legacy decorators, you're tied to that syntax until those libraries update.
- Lesson 2105 — When You Might Still See Legacy Decorators
- Dependency management
- No clear way to express "this file needs that file"
- Lesson 1396 — What Are ES Modules?
- Dependent (must be sequential)
- Lesson 1365 — Identifying Independent Async Operations
- Deprecation warnings
- for features you plan to remove (with the feature still working)
- Lesson 2520 — MINOR: Backward-Compatible Features
- Depth matters most
- Calling `flat(Infinity)` on a deeply nested array forces JavaScript to traverse every level.
- Lesson 895 — Performance Characteristics of flat() and flatMap()
- Derived state
- is data calculated from other data sources.
- Lesson 2143 — Derived State and Automatic Recalculation
- description
- .
- Lesson 1005 — Symbol Descriptions for DebuggingLesson 2485 — npm init and Creating package.jsonLesson 2492 — npm search and Finding Packages
- Desktop Applications
- Popular apps like Visual Studio Code, Slack, and Discord are built with JavaScript using Electron.
- Lesson 5 — JavaScript Beyond the Browser
- detached
- it has zero length and cannot be used.
- Lesson 2006 — Transfer and Detaching with structuredCloneLesson 2162 — Transferring ArrayBuffers Between Threads
- Detached Buffers
- After transferring an `ArrayBuffer`, the original becomes unusable (detached).
- Lesson 2177 — Error Handling in Cross-Context Messaging
- Detached DOM nodes
- (elements removed from the page but still in memory)
- Lesson 533 — Debugging Closure Memory Issues
- Detached DOM trees
- are referenced in JavaScript but removed from the page
- Lesson 1870 — What Qualifies as a Memory Leak in JavaScript
- Deterministic
- Same input in same state always produces same result
- Lesson 2425 — What Is a Finite-State Machine?
- Development debugging
- Catch mistakes where you forgot error handling
- Lesson 1506 — Process Event: 'unhandledRejection'
- Development experience
- They enable hot module replacement for instant feedback
- Lesson 2453 — What is a bundler and why do we need one?
- Development mode
- Vite serves your source files as native ES modules directly to the browser.
- Lesson 2459 — Vite: Development server meets bundler
- Diffs become meaningful
- Style noise doesn't obscure actual changes
- Lesson 2604 — Consistent Style vs. Personal Preference
- Direct Memory Access
- Because `Uint8Array`, `Float32Array`, and friends store elements in a predictable format, JavaScript engines can skip type checks and directly manipulate memory.
- Lesson 2330 — Performance Characteristics
- Disable a rule entirely
- by setting it to `"off"` or `0`
- Lesson 2569 — Overriding Rules in Extended Configs
- Disk space waste
- Every project got its own complete copy of every dependency.
- Lesson 2527 — Why Alternative Package Managers Exist
- Distinguish error categories
- – Use `instanceof` to handle different failures differently
- Lesson 1151 — Why Custom Error Classes
- Division truncates
- Unlike regular division, BigInt division always returns just the whole number part, throwing away any remainder.
- Lesson 1969 — BigInt Arithmetic Operations
- do not
- have their own `arguments` object.
- Lesson 411 — Arguments Object LimitationsLesson 2103 — Property and Parameter Decorators in Legacy Syntax
- Do wrap
- code that genuinely might throw errors you can handle:
- Lesson 1136 — Try/Catch Performance Considerations
- Documentation
- Tells other developers (and future you) what's safe to rely on
- Lesson 1829 — Convention-Based Privacy with Underscore PrefixLesson 2217 — ResolvedOptions to Inspect SettingsLesson 2609 — What JSDoc Is and Why It Matters
- Documentation corrections
- Lesson 2521 — PATCH: Bug Fixes and Safe Updates
- does not
- match newline characters:
- Lesson 1681 — The Dot MetacharacterLesson 1713 — Negative Lookahead Syntax (?!...)
- DOM (Document Object Model)
- is accessed through `document` and represents your HTML page as a tree of objects you can manipulate with JavaScript.
- Lesson 1490 — The DOM and Window as Browser-Specific APIs
- DOM Nodes
- Elements from the web page (like a `<div>` or `<button>`) can't be cloned.
- Lesson 694 — structuredClone LimitationsLesson 1893 — Performance Monitor for Memory TrendsLesson 2003 — structuredClone: Deep Cloning Made EasyLesson 2004 — What structuredClone Can and Cannot CloneLesson 2151 — What Data Can Be Transferred?
- DOM reflows
- Each change can trigger a layout recalculation
- Lesson 1900 — Batch Operations vs Individual Updates
- don't
- attach them to the returned object, they remain trapped in the function's scope.
- Lesson 1807 — Privacy in Factories with ClosuresLesson 2521 — PATCH: Bug Fixes and Safe Updates
- Don't mock simple utilities
- Lesson 2706 — When to Mock and When Not To
- dot notation
- is the most straightforward syntax: you write the object's name, followed by a dot (`.
- Lesson 591 — Accessing Properties with Dot NotationLesson 601 — Dot Notation vs Bracket NotationLesson 603 — Adding Properties to Existing ObjectsLesson 803 — The Length Property
- Double Quotes Only
- Lesson 678 — JSON Syntax Rules
- down
- to the nearest integer, like dropping to the floor below you.
- Lesson 136 — Rounding: Math.floor, Math.ceil, Math.round, Math.truncLesson 1594 — Math.round, Math.floor, and Math.ceil
- Downloads
- the `lodash` package and all its dependencies from the npm registry
- Lesson 2486 — Installing Packages with npm install
- Drag operation example concept
- Lesson 2141 — Event Streams and Complex User Interactions
- Drain all microtasks
- run every microtask in the microtask queue until it's empty
- Lesson 1195 — The Event Loop Tick CycleLesson 1214 — Order of Execution in the Loop
- Drain occurs
- Once the buffer empties enough, the stream emits a `'drain'` event
- Lesson 1576 — How Backpressure Works Internally
- Draw three columns
- Call Stack | Microtask Queue | Task Queue
- Lesson 1220 — Mental Model for Debugging Async
- Drill into specific instances
- to see what's keeping them alive (their retaining path)
- Lesson 1888 — Filtering by Constructor Name
- Drop
- (skip) the first `n` values and continue with the rest
- Lesson 2053 — Taking and Dropping with Iterators
- Duck-typed confusion
- Any object can claim to be a functor by having a `map` method, but without types, you can't verify it follows the rules.
- Lesson 1799 — Functor/Monad Pattern Mismatch in JS
- Duplex
- (both), and **Transform** (modify data as it flows).
- Lesson 1548 — What Are Streams?Lesson 1550 — The Four Stream Types
- Duplicates are meaningful
- (like a shopping cart with 3 apples)
- Lesson 1054 — When to Use Sets vs Arrays
- During transition
- while moving from one state to another
- Lesson 2429 — Adding Side Effects and Actions
- Dynamic `import()` is promise-based
- it returns a promise immediately and loads the module asynchronously.
- Lesson 1429 — Dynamic Import vs require()
- Dynamic access is possible
- Code could call methods via bracket notation or reflection
- Lesson 2471 — Tree Shaking Class Methods
- Dynamic behavior
- Adjust logic based on which defaults were applied
- Lesson 2217 — ResolvedOptions to Inspect Settings
- dynamic binding
- , meaning the value of `this` is determined at *runtime* based on how the function is invoked, not where it's defined.
- Lesson 535 — Dynamic Binding ExplainedLesson 537 — Why 'this' Uses Dynamic BindingLesson 538 — The Four Binding Rules PreviewLesson 571 — Lexical 'this' vs Dynamic 'this'
- Dynamic content updates
- with dozens or hundreds of translatable strings
- Lesson 2253 — Deciding Between Built-ins and Libraries
- Dynamic dependencies
- If value B depends on A, and C depends on both, Signals or computed observables track these relationships automatically.
- Lesson 2139 — Identifying Problems Suited for Reactive Patterns
- Dynamic import
- is different: it's a function-like syntax (`import()`) that loads modules **on demand**, during runtime, whenever and wherever you call it.
- Lesson 1420 — What is Dynamic Import?Lesson 1453 — Requiring ESM from CJS
- Dynamic lists
- You're formatting lists of user-generated content or data that changes frequently
- Lesson 2246 — When to Use ListFormat and DisplayNames
- Dynamic Scope
- The variable's location is determined by where the function is *called* from.
- Lesson 490 — Static vs Dynamic Scope
E
- EACCES
- (Error ACCESs) means you lack permission to read, write, or execute the file.
- Lesson 1530 — Error Handling Patterns in FS Operations
- eager
- it processes the entire array immediately, creating a new array with all transformed values.
- Lesson 1122 — Lazy Map with GeneratorsLesson 2128 — Observables vs Promises
- Eager evaluation
- (like arrays):
- Lesson 1119 — What Makes a Sequence Lazy?Lesson 1127 — When to Choose Lazy vs. Eager
- Early exit scenarios
- Stop processing as soon as you find what you need (no wasted computation)
- Lesson 1127 — When to Choose Lazy vs. Eager
- early return
- , that's usually clearer:
- Lesson 334 — When Labels Improve Readability vs Create ConfusionLesson 420 — Early Returns for Control Flow
- Early returns
- let you handle errors at the top of your callback and exit immediately:
- Lesson 1255 — Limiting Nesting Depth
- Early termination
- Need the first 5 matches from a billion records?
- Lesson 2055 — When Lazy Evaluation Wins
- Easier Reasoning
- Lesson 1745 — Why Pure Functions Matter
- Easier to learn
- The syntax (how you write code) reads more naturally
- Lesson 1 — JavaScript: A High-Level Programming Language
- Easier to read
- Variable names immediately describe what you're pulling out
- Lesson 915 — What is Array Destructuring?
- Easier to test
- (pass mock dependencies)
- Lesson 1750 — Handling External Dependencies PurelyLesson 1777 — What is Function Composition?
- Easy defaults
- Check for missing properties and provide fallbacks
- Lesson 672 — Passing Configuration Objects
- ECMAScript is the specification
- (the rulebook), while **JavaScript is an implementation** (the actual language you write code in).
- Lesson 3 — JavaScript vs ECMAScript
- Ecosystem Compatibility
- can't be ignored.
- Lesson 2465 — Choosing a bundler for your projectLesson 2661 — Choosing the Right Test Runner
- Ecosystem Support
- NPM is the default—every package works with it, every tutorial assumes it, and CI/CD pipelines support it without configuration.
- Lesson 2536 — Choosing the Right Package Manager
- Edge cases
- Handle special scenarios before main logic
- Lesson 420 — Early Returns for Control FlowLesson 2603 — Automation vs. Human Judgment
- Editor settings
- – Personal preferences stored in your code editor (VS Code, WebStorm, etc.
- Lesson 2588 — Editor Settings vs Project Config
- EEXIST
- means a file or directory already exists when you tried to create it.
- Lesson 1530 — Error Handling Patterns in FS Operations
- effect
- is a function that runs automatically when the signals it depends on change.
- Lesson 2120 — Effects and Side EffectsLesson 2186 — Atomics.compareExchange for Lock-Free Updates
- element
- Lesson 441 — Map's Callback ParametersLesson 446 — Filter's Callback ParametersLesson 851 — Map's Callback ParametersLesson 882 — Callback Parameters: element, index, array
- Embedding images in HTML/CSS
- Data URLs like `<img src="data:image/png;base64,iVBORw0KG.
- Lesson 2353 — What is Base64 and Why It Exists
- Empty Map
- Call `new Map()` with no arguments to create an empty Map that you'll populate later.
- Lesson 1032 — Creating a New Map
- Empty the stack first
- All synchronous code finishes before the event loop checks queues
- Lesson 1219 — Tracing Execution with a Diagram
- Enable frameworks
- (like Angular or TypeScript experimental decorators) to inject functionality declaratively
- Lesson 2067 — What Decorators Are and Why They Exist
- Enable targeted handling
- – Catch specific error types without catching everything
- Lesson 1151 — Why Custom Error Classes
- Encapsulate logic
- the calculation stays hidden inside the object
- Lesson 659 — Defining Getters with the 'get' Keyword
- Encapsulation
- `count` is truly private
- Lesson 510 — Counter FactoriesLesson 669 — Basic Factory Function PatternLesson 1827 — What Encapsulation Means in JavaScriptLesson 1983 — Why Private Fields?
- Encoding
- (optional, but typically `'utf8'` for text files)
- Lesson 1519 — Reading Files Synchronously with fs.readFileSync()Lesson 1555 — Creating a Writable StreamLesson 1584 — Buffer Encoding
- Encryption/decryption
- Lesson 1564 — Transform Streams Explained
- end
- Lesson 170 — Trimming Whitespace with trim, trimStart, and trimEndLesson 177 — Padding Strings with padStart and padEndLesson 821 — copyWithin(): Copying Elements Within the Same ArrayLesson 890 — The Array.prototype.fill() MethodLesson 1322 — Catch Placement: End vs Middle of ChainLesson 1997 — Performance Characteristics of findLast()Lesson 2366 — Slicing Blobs
- Endianness
- refers to the order in which these bytes are stored.
- Lesson 2329 — Byte Order and Endianness
- Enforce through CI/CD
- Even with hooks, run `npm run lint` and `npm run format:check` in continuous integration.
- Lesson 2601 — Team Adoption and Best Practices
- ENOENT
- (Error NO ENTry) means "file or directory not found"—the path you specified doesn't exist.
- Lesson 1530 — Error Handling Patterns in FS Operations
- Ensures proper cleanup
- when the pipeline completes or errors
- Lesson 1581 — Pipeline for Better Error Handling
- Enterprise Applications
- Large companies often have strict stability requirements.
- Lesson 2105 — When You Might Still See Legacy Decorators
- Entry Point
- The bundler starts at your entry file (e.
- Lesson 2446 — Dependency ResolutionLesson 2485 — npm init and Creating package.json
- enumerable
- (visible in loops and listings), while others are **non-enumerable** (hidden from most common operations).
- Lesson 634 — Enumerability and Property VisibilityLesson 644 — Object.getOwnPropertyNames() Includes Non-EnumerableLesson 706 — Enumeration and the Prototype Chain
- enumerable own properties
- , meaning it silently ignores non-enumerable and inherited properties.
- Lesson 976 — Spread and Non-Enumerable PropertiesLesson 979 — Common Object Spread Pitfalls
- Environment variables
- configuration values from the operating system
- Lesson 1496 — What is the Process Object?Lesson 1516 — Security and Best PracticesLesson 2632 — Why Runtime Validation Matters
- Error handling
- Skip invalid data without deep nesting
- Lesson 370 — Loop control best practices and readabilityLesson 1257 — Using Control Flow LibrariesLesson 1295 — Chaining vs NestingLesson 1307 — Parallel vs All: Performance ConsiderationsLesson 1429 — Dynamic Import vs require()
- Error handling context
- If you `return await`, errors are caught within the current function's scope.
- Lesson 1350 — Await and Return Values
- Error identification
- The `toString()` output is more descriptive
- Lesson 1153 — Setting the Error Name Property
- Error objects
- `Error`, `TypeError`, etc.
- Lesson 2004 — What structuredClone Can and Cannot CloneLesson 2151 — What Data Can Be Transferred?
- Error path testing
- Testing the failure case at each level means creating separate test scaffolds for errors at level 1, level 2, level 3, etc.
- Lesson 1251 — Testing Callback Hell Code
- Error prevention
- Reduces mistakes from forgetting to spread a level
- Lesson 1762 — Immutability Helpers and Libraries
- Error-first callbacks
- (also called "Node-style callbacks") are a pattern where callback functions always receive an error object as their **first argument**, followed by any result data.
- Lesson 1232 — What Are Error-First Callbacks?
- ES modules
- , but support differs between environments:
- Lesson 1380 — Browser vs Node.js SupportLesson 1396 — What Are ES Modules?Lesson 1450 — CJS and ESM: Two Module SystemsLesson 1540 — CommonJS require() vs ES Module importLesson 1542 — File Extension ConventionsLesson 2447 — Dead Code EliminationLesson 2456 — Rollup: Library-focused bundling
- ES Modules (ESM)
- the newer, standardized system using `import` and `export`
- Lesson 1540 — CommonJS require() vs ES Module import
- ES Modules load asynchronously
- the browser or runtime can fetch and parse multiple files in parallel before executing any code.
- Lesson 1450 — CJS and ESM: Two Module Systems
- ESLint
- Catches common JavaScript mistakes as you type
- Lesson 29 — Setting Up a Local Development EnvironmentLesson 2576 — What Prettier Is and Isn'tLesson 2604 — Consistent Style vs. Personal Preference
- ESLint v8 or earlier
- (flat config didn't exist before v8.
- Lesson 2575 — Choosing Between Legacy and Flat Config
- ESM
- creates a live binding—changes in the original module reflect in imports.
- Lesson 1540 — CommonJS require() vs ES Module import
- ESM-first
- Modern approach, supports tree-shaking, works everywhere with proper tooling
- Lesson 1458 — Practical Interop StrategiesLesson 2472 — CommonJS and Tree Shaking Limitations
- ESM-only
- , you'll need ESM (or dynamic `import()` workarounds).
- Lesson 1547 — Choosing Between CJS and ESM
- Establish a baseline
- with concrete metrics (load time, memory usage, FPS)
- Lesson 1918 — Why Measurement Matters
- Even or odd detection
- Lesson 236 — The Remainder Operator (%)
- Event emissions
- Triggering change events repeatedly
- Lesson 1900 — Batch Operations vs Individual Updates
- Event emitters
- excel at decoupled pub-sub communication but don't inherently model state.
- Lesson 2434 — FSMs vs Other Patterns
- Event listeners
- remain attached to removed DOM elements
- Lesson 1870 — What Qualifies as a Memory Leak in JavaScript
- every
- string method you've learned: `trim()`, `replace()`, `slice()`, `repeat()`, `padStart()`, and all the rest.
- Lesson 182 — Immutability: All Methods Return New StringsLesson 2627 — Project-Wide Type Checking with jsconfig.json
- everything
- an object owns, including properties marked as non-enumerable.
- Lesson 630 — Object.getOwnPropertyNames()Lesson 1404 — Importing Everything with '*'
- Everything else is truthy
- including `"0"`, `[]`, `{}`, and even `"false"` (a non-empty string).
- Lesson 312 — Truthy and Falsy in Conditions
- exact integer arithmetic
- with large numbers:
- Lesson 127 — Why BigInt Exists: Beyond Number.MAX_SAFE_INTEGERLesson 134 — When to Use BigInt
- Exact matching
- uses the equality assertions you already know:
- Lesson 2677 — String Matching Assertions
- exact version
- of every package installed, including nested dependencies.
- Lesson 2499 — The Purpose of LockfilesLesson 2507 — Audit and Security in Dependencies
- exactly
- the same number of elements as the original.
- Lesson 442 — Map Always Returns a New ArrayLesson 1632 — toLocaleString with Custom Format OptionsLesson 1685 — Exact and Range QuantifiersLesson 1695 — Anchors in Alternations
- exactly one argument
- (unary functions).
- Lesson 483 — Composition with Arity and CurryingLesson 1781 — Unary Functions in Composition
- Exactly one parameter
- Parentheses **optional** — `x => .
- Lesson 395 — Parentheses in Arrow Function ParametersLesson 661 — Getters Return Values, Setters Accept One Parameter
- Example scenario
- Processing a 10GB log file line-by-line—lazy lets you handle one line at a time without crashing.
- Lesson 1127 — When to Choose Lazy vs. EagerLesson 1639 — Daylight Saving Time Edge CasesLesson 1653 — When to Use Intl vs Third-Party LibrariesLesson 2194 — Ideal Use Cases: Image Processing and Data Parsing
- Examples of the coercion
- Lesson 263 — Bitwise Operators and Type Coercion
- exceptional
- and unexpected (like a network failure or invalid input)
- Lesson 1149 — Throwing vs Returning Error ValuesLesson 2440 — When to Use Result vs Throw
- Exceptional circumstances
- occur (network failures, missing resources)
- Lesson 1161 — Throwing vs Returning Errors
- Excessive composition depth
- When you chain 5+ composed functions, readers must mentally trace through each transformation.
- Lesson 1796 — Recognizing Over-Abstraction in Functional Code
- Execute
- everything on the call stack until empty
- Lesson 1213 — The Event Loop Flow DiagramLesson 2098 — Composing Multiple Decorators
- Execution flow
- Lesson 342 — The For Loop Structure
- Execution order
- Lesson 1200 — Mixing setTimeout and Promises
- Execution order analogy
- Imagine three people wrapping a gift.
- Lesson 2084 — Applying Multiple Decorators
- executor function
- that receives two special arguments: `resolve` and `reject`.
- Lesson 1265 — Creating a Promise with the ConstructorLesson 1266 — The Executor Function
- existing projects
- Maintain CommonJS if migration isn't worth the effort.
- Lesson 1449 — When to Use CommonJS in Modern ProjectsLesson 2575 — Choosing Between Legacy and Flat Config
- exit code
- back to the operating system or parent process.
- Lesson 1500 — Process.exit() and Exit CodesLesson 1504 — Process Event: 'exit'
- Expensive operations
- If each transformation is costly (API calls, heavy computation), lazy evaluation only pays that cost for items you actually consume.
- Lesson 2055 — When Lazy Evaluation Wins
- Experimental Decorators
- (TypeScript's original):
- Lesson 2099 — Experimental Decorators vs. Stage 3 Decorators
- explicit
- conversions (when you deliberately call `String()` or `toString()`) work fine.
- Lesson 300 — Symbol Coercion ThrowsLesson 1352 — Await vs Then: Readability Trade-offsLesson 2116 — When Observers Create Complexity
- Explicit Binding
- When you manually specify what `this` should be using special functions
- Lesson 538 — The Four Binding Rules Preview
- Explicit coercion
- is when *you* deliberately convert types using constructors like `Number()`, `String()`, or `Boolean()`.
- Lesson 274 — What is Type Coercion?
- Explicit null/undefined checks
- Lesson 2675 — Truthiness and Falsiness Assertions
- Explicit, discrete states
- – If you can name each mode your system can be in ("loading", "authenticated", "editing"), an FSM may help.
- Lesson 2432 — When to Use FSMs in JavaScript
- Explicitness
- Every failure point is **visible** in the code.
- Lesson 2442 — Trade-offs: Verbosity vs Explicitness
- Expressing intent
- – the matcher name documents what you're actually testing
- Lesson 2681 — Custom Matchers
- expression
- rather than a statement.
- Lesson 228 — Ternary as an ExpressionLesson 1331 — Async Function SyntaxLesson 1349 — Await Expressions Can Be Used Anywhere
- Expressions
- are not hoisted—the variable exists, but it's `undefined` until the assignment runs
- Lesson 381 — Function ExpressionsLesson 384 — Declaration vs Expression: Hoisting Behavior
- Extension disabled
- – Verify it's enabled in your extensions panel
- Lesson 2592 — Troubleshooting Editor Integration Issues
- External references
- Lesson 1877 — Circular References in Modern Engines
- Extract nested callbacks
- into separate, named functions that you pass as callbacks instead of anonymous functions
- Lesson 1255 — Limiting Nesting Depth
- Extract to Functions
- Lesson 336 — Why Labels Are Rare in Modern JavaScript
- Extracted functions
- replace anonymous nested callbacks with named ones:
- Lesson 1255 — Limiting Nesting Depth
- Extracted methods
- You pull a method off an object and pass it elsewhere, losing its original context
- Lesson 557 — Why Manual 'this' Binding Exists
- Extracts the `value`
- from each result object and assigns it to your loop variable
- Lesson 1077 — Consuming Iterators with for...of
F
- Factories
- Use when you need full encapsulation and simple object creation
- Lesson 1813 — When to Choose MixinsLesson 1814 — Combining All Three Approaches
- factory function
- is simply a regular function that creates and returns a new object.
- Lesson 668 — What Are Factory Functions?Lesson 1806 — Factory Functions: Return Plain Objects
- Factory functions
- are plain functions that build and return new objects.
- Lesson 671 — Factory Functions vs Constructor FunctionsLesson 731 — When Object.create Is the Right ToolLesson 1804 — Three Approaches to Object CreationLesson 1810 — Functional Mixins for Safer CompositionLesson 1815 — Trade-offs and Maintainability
- Factory methods
- that create instances in special ways
- Lesson 789 — Static vs Instance: When to Use Each
- Factory/Builder
- Choose factories for simple object creation with varying types.
- Lesson 1850 — When to Use Each Pattern
- Fake timers
- that let you control time itself in your tests.
- Lesson 2393 — Testing Debounce and ThrottleLesson 2693 — Testing Race Conditions and Timing
- False sense of control
- You think you're awaiting, but your code continues past the loop immediately
- Lesson 1390 — Awaiting in Loops Without Intent
- falsy
- , it immediately returns that first value without even looking at the second.
- Lesson 214 — The && (AND) OperatorLesson 220 — Using || for Default ValuesLesson 249 — Logical Assignment OperatorsLesson 287 — The Empty String to Number CoercionLesson 312 — Truthy and Falsy in Conditions
- falsy values
- they evaluate to `false`:
- Lesson 285 — Null and Undefined Coercion RulesLesson 1948 — Nullish vs Falsy Values
- Fast rebuild times
- – minimal optimizations, just enough to make code runnable
- Lesson 2449 — Development vs Production Builds
- Faster to write
- You can build things quickly without getting bogged down in technical minutiae
- Lesson 1 — JavaScript: A High-Level Programming Language
- Feature Needs
- Do you need built-in code coverage, snapshot testing, or mock management?
- Lesson 2661 — Choosing the Right Test Runner
- Fighting your configuration
- If you disable the same rule everywhere, remove it from your config instead
- Lesson 2607 — When to Disable Rules
- File formats
- Reading text from binary files requires decoding bytes into strings
- Lesson 2343 — Why TextEncoder and TextDecoder Exist
- File Matching
- The old system used `overrides` arrays with `files` patterns.
- Lesson 2573 — Migrating from .eslintrc to Flat Config
- File size matters
- Sending large images, videos, or files where bandwidth is limited
- Lesson 2360 — Base64 Overhead and When to Avoid It
- File system access
- – reading and writing files on your computer
- Lesson 18 — Node.js Runtime: Server-Side JavaScriptLesson 1174 — Why JavaScript Needs Asynchronous Code
- FileList
- containing File objects you can then read or process.
- Lesson 2368 — Getting Files from Input Elements
- Filter
- by package name, location, or dependency relationships
- Lesson 2551 — Running Scripts Across Workspaces
- Filter then map
- Remove unwanted elements first, then transform what remains
- Lesson 856 — Combining map and filter
- Filter with arrow function
- Lesson 398 — Arrow Functions with Array Methods
- Final-expression
- `i++, j--` both execute after each loop body, before the next condition check
- Lesson 346 — Multiple Variables in For Loops
- Finally block
- (optional): Runs cleanup code whether an error occurred or not:
- Lesson 2435 — The Traditional Throw/Try-Catch Pattern
- Financial calculations
- are the classic example.
- Lesson 126 — When to Use BigInt InsteadLesson 1972 — When to Use BigInt vs Number
- Find a specific package
- Lesson 2491 — npm list and Viewing Installed Packages
- Finding the Memory Tab
- Lesson 1884 — Opening DevTools Memory Profiler
- Finite states
- A limited, enumerable set of possible states
- Lesson 2425 — What Is a Finite-State Machine?
- Firefox
- uses SpiderMonkey
- Lesson 9 — What is a JavaScript Engine?Lesson 1963 — Browser and Node Support Considerations
- first
- "cats" became "dogs"—the second one stayed the same.
- Lesson 171 — Replacing Substrings with replaceLesson 481 — Composing with Array Methods
- First argument
- An array of the *literal string parts* (the non-interpolated text)
- Lesson 152 — Tagged Template LiteralsLesson 558 — The call() MethodLesson 1232 — What Are Error- First Callbacks?
- First Contentful Paint (FCP)
- When the first text, image, or canvas element appears on screen.
- Lesson 1926 — Real User Monitoring Metrics
- First impressions
- Initial page load, time to interactive
- Lesson 1934 — Hot Paths and Critical User Journeys
- First iteration
- `sum` is `0`, `price` is `10` → returns `10`
- Lesson 457 — Summing Numbers with ReduceLesson 459 — Flattening Arrays with Reduce
- first match
- .
- Lesson 84 — Scope Chain LookupLesson 160 — search() with Regular ExpressionsLesson 166 — Global vs Non-Global Regex Matches
- first truthy value
- it encounters.
- Lesson 220 — Using || for Default ValuesLesson 223 — Logical Operators Return Operands, Not Booleans
- first-class citizens
- .
- Lesson 427 — What Makes Functions First-ClassLesson 428 — Assigning Functions to Variables
- Fixed-position matches
- To check if an email ends with ".
- Lesson 1676 — Common Mistakes and When Regex Is Overkill
- Flamegraph patterns
- Are generator functions showing up as bottlenecks?
- Lesson 2066 — Profiling Iterator Performance in Real Applications
- Flat line after actions
- Memory goes up during activity, then levels off
- Lesson 1893 — Performance Monitor for Memory Trends
- Flattening before reducing
- Lesson 894 — Combining flat() with Other Array Methods
- Flattening operators
- automatically subscribe to these inner observables and flatten the results into a single stream.
- Lesson 2134 — Flattening Operators
- Flattening then filtering
- Lesson 894 — Combining flat() with Other Array Methods
- Flexibility
- You control exactly what each object contains
- Lesson 669 — Basic Factory Function PatternLesson 671 — Factory Functions vs Constructor FunctionsLesson 978 — Object Spread vs Object.assignLesson 1806 — Factory Functions: Return Plain ObjectsLesson 1824 — The Decorator Pattern for Behavior LayeringLesson 1847 — The Decorator Pattern
- Flexibility over security
- Privacy is about organization, not protection
- Lesson 1991 — When to Use Private Fields
- Flexible
- easy to customize what gets returned
- Lesson 668 — What Are Factory Functions?Lesson 799 — Creating Arrays with Array LiteralsLesson 962 — Concatenating Arrays with Spread
- Flexible whitespace
- `\s+` matches one or more whitespace characters, useful for splitting text where spacing varies.
- Lesson 1687 — Combining Classes and Quantifiers
- Flowing Mode (Push)
- The stream actively pushes data to your program as soon as it's available, triggering `'data'` events automatically.
- Lesson 1553 — Paused vs Flowing Mode
- Follow the installation wizard
- the defaults are typically fine
- Lesson 2484 — Installing Node.js and NPM
- Fonts
- Typically copied to output with proper paths updated in your CSS
- Lesson 2448 — Asset Pipeline Integration
- For applications
- (web apps, APIs, CLI tools), committing the lockfile is essential:
- Lesson 2504 — Committing Lockfiles to Git
- For arrays
- Use `toContain()` or `toHaveLength()` instead of checking properties manually
- Lesson 2683 — Choosing the Right Assertion
- For browser JavaScript specifically
- Lesson 1495 — Where to Learn More About Web Development
- For class fields
- Lesson 2069 — Decorator Syntax Basics
- For class methods
- Lesson 2069 — Decorator Syntax Basics
- For classes
- Lesson 2069 — Decorator Syntax Basics
- For each element
- , add or modify a property on the accumulator
- Lesson 864 — Building Objects with Reduce
- For empty arrays
- If your array might be empty and you don't provide an initial value, `reduce()` throws a `TypeError`.
- Lesson 862 — The Initial Value: When to Provide It and Why
- For exceptions
- Use `toThrow()` instead of try-catch blocks with boolean flags
- Lesson 2683 — Choosing the Right Assertion
- For existence
- Use `toBeDefined()`, `toBeNull()` instead of `toBe(undefined)`
- Lesson 2683 — Choosing the Right Assertion
- For fulfilled promises
- Lesson 1312 — The allSettled Return Format
- For getters/setters
- Lesson 2069 — Decorator Syntax Basics
- For integrated learning
- Lesson 1495 — Where to Learn More About Web Development
- For internal application code
- , underscore conventions often suffice since your team knows the rules.
- Lesson 1836 — Choosing the Right Encapsulation Strategy
- For memory-sensitive scenarios
- (like game entities with thousands of instances), WeakMaps add overhead you might not want.
- Lesson 1836 — Choosing the Right Encapsulation Strategy
- For numbers
- Use `toBeGreaterThan()`, `toBeLessThan()`, `toBeCloseTo()` instead of manual comparisons
- Lesson 2683 — Choosing the Right Assertion
- For rejected promises
- Lesson 1312 — The allSettled Return Format
- For staleness after edits
- Run `npm install` to update the lockfile based on your new package.
- Lesson 2503 — When Lockfiles Get Out of Sync
- For strings
- Use `toContain()` or `toMatch()` instead of testing `string.
- Lesson 2683 — Choosing the Right Assertion
- Forgetting the global flag
- Using `match()` without the `g` flag only returns the first match.
- Lesson 1676 — Common Mistakes and When Regex Is Overkill
- Forgotten return statements
- If you don't return a promise or use `await`, the test finishes before async assertions run:
- Lesson 2692 — Avoiding False Positives with Assertions
- Form validation
- Only validate after the user finishes entering input.
- Lesson 2383 — What Debounce SolvesLesson 2390 — Debounce vs Throttle: When to Use Which
- Formatting violations
- Missing semicolons, wrong quotes, inconsistent spacing
- Lesson 2590 — Quick Fix and Auto-Fix in Editors
- Formatting-only challenges
- You need to display numbers, currencies, dates, or lists correctly for different locales
- Lesson 2247 — Identifying Simple i18n Requirements
- FormData
- mimics HTML form submissions, great for file uploads:
- Lesson 2270 — Request Body and Body TypesLesson 2284 — Request Body Basics
- FormData body
- → usually auto-set to `"multipart/form-data"` (don't set manually)
- Lesson 2289 — Content-Type Header and Body Matching
- four parameters
- in a specific order.
- Lesson 454 — The Reducer Function SignatureLesson 861 — Reduce Signature: Accumulator, Current, Index, Array
- Fourth iteration
- `sum` is `40`, `price` is `30` → returns `70`
- Lesson 457 — Summing Numbers with Reduce
- Framework Compatibility
- Modern libraries like React rely on immutability to detect changes efficiently.
- Lesson 906 — Why Immutability Matters in JavaScript
- Framework or plugin systems
- Where untrusted code might run alongside yours
- Lesson 1991 — When to Use Private Fields
- Frameworks
- (like React, Vue, or Angular) provide complete structures for building entire applications
- Lesson 7 — The JavaScript Ecosystem
- Frequency
- Code executed thousands of times (loops, event handlers, animations)
- Lesson 1934 — Hot Paths and Critical User Journeys
- Frequent membership checks
- – `has()` is much faster than `includes()`
- Lesson 1066 — Array vs Set: Handling Unique Values
- Frequent recalculation
- Values change often and need immediate updates
- Lesson 2143 — Derived State and Automatic Recalculation
- From npm to PNPM
- Lesson 2535 — Migrating Between Package Managers
- From npm to Yarn
- Lesson 2535 — Migrating Between Package Managers
- Frontend Masters
- and **Scrimba** offer interactive video courses with browser-focused projects
- Lesson 1495 — Where to Learn More About Web Development
- Fulfilled
- The operation completed successfully with a result
- Lesson 1263 — What is a Promise?Lesson 1264 — Promise States
- function
- is a reusable piece of code you define with the `function` keyword.
- Lesson 81 — Blocks vs FunctionsLesson 152 — Tagged Template LiteralsLesson 180 — Replacement Functions and Capture GroupsLesson 682 — The Replacer ParameterLesson 1810 — Functional Mixins for Safer Composition
- function call
- that returns a **promise**.
- Lesson 1421 — Basic Dynamic Import SyntaxLesson 2118 — Signal Creation and Reading
- Function call time
- How long does each `next()` call take?
- Lesson 2066 — Profiling Iterator Performance in Real Applications
- Function Calls
- Lesson 1945 — Common Optional Chaining Patterns
- function composition
- scenarios where you're creating specialized versions or chaining operations.
- Lesson 1776 — When Currying Is OverkillLesson 1784 — Composition vs Chaining
- Function Coverage
- tracks whether each function in your codebase was called at least once during testing.
- Lesson 2716 — What Code Coverage MeasuresLesson 2718 — Reading Coverage Reports
- function declaration
- is the most traditional way to define a named function in JavaScript.
- Lesson 379 — Function Declaration SyntaxLesson 381 — Function Expressions
- function declarations
- are fully hoisted—you can call them before they appear in your code.
- Lesson 96 — Function Expressions vs DeclarationsLesson 423 — Function Expression Hoisting BehaviorLesson 1331 — Async Function SyntaxLesson 2086 — When Decorators Cannot Be Used
- function expression
- ), the hoisting behavior follows the variable's rules, not the function's.
- Lesson 96 — Function Expressions vs DeclarationsLesson 381 — Function Expressions
- function expressions
- , where you assign a function to a variable:
- Lesson 382 — Anonymous FunctionsLesson 391 — The Function Statement in BlocksLesson 1331 — Async Function Syntax
- Function inlining
- is an optimization where the JavaScript engine replaces a function call with the actual body of the function itself.
- Lesson 1913 — What Is Function Inlining?
- Function name
- A descriptive identifier (follows variable naming rules)
- Lesson 379 — Function Declaration Syntax
- Function parameters
- Lesson 932 — Destructuring with Rest Properties
- Functions
- are like entire separate buildings — `var`, `let`, and `const` all stay inside their function
- Lesson 81 — Blocks vs FunctionsLesson 594 — Methods in Object LiteralsLesson 686 — Deep Cloning with JSONLesson 694 — structuredClone LimitationsLesson 2003 — structuredClone: Deep Cloning Made EasyLesson 2004 — What structuredClone Can and Cannot CloneLesson 2005 — structuredClone vs JSON Parse/StringifyLesson 2151 — What Data Can Be Transferred? (+1 more)
- Future-proof
- Matches how `let`/`const` work, even if you're using `var`
- Lesson 99 — Best Practices: Declare Before Use
G
- Game loop inputs
- Process player controls at fixed rates
- Lesson 2390 — Debounce vs Throttle: When to Use Which
- Game loops
- Execute one frame before checking game state
- Lesson 341 — When to Use Do-While vs WhileLesson 1903 — When Micro-Optimizations Do Matter
- Game physics engines
- Workers collaboratively updating a shared world state at 60+ FPS
- Lesson 2189 — When SharedArrayBuffer Makes Sense
- Garbage collection
- is the *automatic* process by which JavaScript identifies and reclaims memory that's no longer needed.
- Lesson 1860 — What is Garbage Collection?
- Garbage collection roots
- are the starting points the engine uses to determine reachability.
- Lesson 1862 — Roots and Reference Chains
- General assertions
- like `toBe()` or `toEqual()` work for many scenarios but give vague feedback:
- Lesson 2683 — Choosing the Right Assertion
- Generate unique IDs
- for each request (timestamps, counters, or UUIDs work)
- Lesson 2176 — Request-Response Patterns with PostMessage
- Generated code
- Database migrations, API client libraries, or any file created by tools
- Lesson 2579 — Ignoring Files with .prettierignoreLesson 2607 — When to Disable Rules
- Generator functions
- (using `function*`) that yield multiple values and pause execution
- Lesson 2038 — What Are Async Generators?
- Generic `Error`
- – Use for application-specific problems that don't fit the other categories:
- Lesson 1145 — When to Use Specific Error Types
- Geolocation API
- lets you access the user's physical location (with permission).
- Lesson 1494 — Web APIs Beyond the DOM
- getter
- runs when you read a property's value, and a **setter** runs when you assign a new value to it.
- Lesson 658 — What Are Getters and Setters?Lesson 659 — Defining Getters with the 'get' Keyword
- Getters
- and **setters** are special methods that *look* like regular properties from the outside, but execute functions behind the scenes.
- Lesson 658 — What Are Getters and Setters?Lesson 977 — Spread with Getters and Setters
- Getters and setters
- shine when you need **validation, computation, or side effects**.
- Lesson 667 — When to Use Getters/Setters vs Plain Properties
- GitHub Packages
- , **JFrog Artifactory**, and regional mirrors.
- Lesson 2496 — The NPM Registry and Alternatives
- Glob patterns
- are wildcard expressions that match file paths.
- Lesson 2595 — Configuring File PatternsLesson 2658 — Test Discovery and Patterns
- Global (system-level)
- Installed once on your machine, accessible from anywhere in your terminal.
- Lesson 2487 — Local vs Global Installations
- Global + Case-Insensitive (`gi`)
- Find all matches regardless of case
- Lesson 1728 — Combining Multiple Flags
- Global Install
- Download and store the tool permanently on your system with `npm install -g package-name`.
- Lesson 2510 — NPX vs Global InstallLesson 2554 — Installing ESLint in Your Project
- Global installations
- Lesson 2487 — Local vs Global Installations
- Global namespace pollution
- happens when multiple scripts add variables or functions to the global object (`window` in browsers), creating a chaotic, conflict-prone environment.
- Lesson 1466 — Global Namespace Pollution
- global object
- is a special, always-available object that sits at the top of JavaScript's scope chain.
- Lesson 1459 — The Global Object ConceptLesson 1460 — Window in the Browser
- Global scope pollution
- All imported variables/functions become global within the worker
- Lesson 2155 — Importing Scripts in Workers
- Global State Changes
- Lesson 1743 — Side Effects Defined
- Global Store
- PNPM maintains one central location (usually `~/.
- Lesson 2531 — PNPM's Symlink-Based Architecture
- global symbol registry
- a special storage area where symbols can be registered with string keys and retrieved later.
- Lesson 1009 — The Global Symbol RegistryLesson 1025 — Symbol Registry for Cross-Realm Sharing
- global variable
- .
- Lesson 75 — Undeclared Variables and Implicit GlobalsLesson 1397 — The Module ScopeLesson 1871 — Accidental Global Variables
- global variables
- Lesson 548 — Function Calls: When 'this' is Global (Non-Strict)Lesson 1862 — Roots and Reference ChainsLesson 1870 — What Qualifies as a Memory Leak in JavaScript
- Globals and Environments
- Instead of `env: { browser: true }`, you now import globals from the `globals` package and spread them into `languageOptions.
- Lesson 2573 — Migrating from .eslintrc to Flat Config
- Go-to-definition
- Jump directly to `@typedef` declarations or imported types
- Lesson 2648 — Editor Experience with JSDoc
- God Object
- (or "God Class") is an antipattern where one class or object tries to do everything.
- Lesson 1851 — God Objects: When One Class Does Everything
- Good news
- Modern garbage collectors use mark-and-sweep algorithms that handle circular references automatically.
- Lesson 1877 — Circular References in Modern Engines
- Graceful degradation
- Return partial results instead of total failure
- Lesson 1281 — Recovering from Errors with .catch()Lesson 1313 — Use Cases for allSettled
- Graph Complete
- When no new dependencies are found, you have a complete graph of every module your app depends on.
- Lesson 2446 — Dependency Resolution
- greedy
- they match as many characters as possible while still allowing the overall pattern to succeed.
- Lesson 1686 — Greedy vs Lazy QuantifiersLesson 1733 — Greedy vs Lazy Quantifiers
- Grouping
- `()` — Forces evaluation first, just like parentheses in math
- Lesson 266 — Precedence Levels OverviewLesson 1710 — When to Avoid Excessive CapturingLesson 2205 — Grouping and Notation Options
- Grouping Related Functions
- Keep functions that work together physically close in your file.
- Lesson 426 — Best Practices for Function Ordering
- Guaranteed insertion order
- Iteration always follows the order you added entries
- Lesson 1031 — What is a Map and Why Use It?
- Guaranteed unique
- no accidental name collisions
- Lesson 622 — Computed Keys with SymbolsLesson 1004 — Symbols as Object Keys
- Guard clause approach
- Lesson 315 — Guard Clauses and Early Returns
- Guard clauses
- Check invalid inputs at the function's start
- Lesson 420 — Early Returns for Control Flow
H
- Hard Links
- When you install a package, PNPM creates hard links from the store to your project's `node_modules/.
- Lesson 2531 — PNPM's Symlink-Based Architecture
- hard privacy
- you literally *cannot* access a private field from outside the class.
- Lesson 1986 — Private Fields Are Hard PrivateLesson 1991 — When to Use Private Fields
- Hard to change
- Modifying one feature risks breaking unrelated features buried in the same class.
- Lesson 1851 — God Objects: When One Class Does Everything
- Hard to debug
- Changes appear in unexpected places
- Lesson 52 — Pitfall: Unintended Shared StateLesson 1242 — What is Callback Hell?Lesson 1465 — Implicit Global Access
- Hard to test
- isolating individual operations is nearly impossible
- Lesson 1242 — What is Callback Hell?Lesson 1851 — God Objects: When One Class Does Everything
- Hard to understand
- When a class has 50 methods spanning different concerns, no one knows what it really *does*.
- Lesson 1851 — God Objects: When One Class Does Everything
- Harder maintenance
- Future developers (including you) struggle to modify "optimized" code
- Lesson 1928 — Premature Optimization Is the Root of All Evil
- HEAD
- (like GET but only retrieves headers), or **OPTIONS** (asks what methods are allowed).
- Lesson 2258 — Fetch and HTTP Methods
- Headers interface
- gives you a structured, object-like way to manipulate these key-value pairs.
- Lesson 2269 — Request Headers Object
- Heap snapshot
- Captures the current state of all objects in memory (what you'll use most often)
- Lesson 1884 — Opening DevTools Memory Profiler
- Heavy computations
- called repeatedly (complex math, parsing, formatting)
- Lesson 2378 — When Memoization Helps Performance
- Helpful warnings
- – extra runtime checks and developer-friendly error messages
- Lesson 2449 — Development vs Production Builds
- Heterogeneous binary structures
- (file headers, network protocols)
- Lesson 2341 — DataView vs Typed Arrays
- Hexadecimal (`0x` prefix)
- Uses digits 0-9 and letters A-F:
- Lesson 101 — Number Literals: Decimal, Hex, Octal, Binary
- hidden classes
- (also called "shapes" or "maps") that describe the structure of your objects.
- Lesson 1906 — What Are Hidden Classes?Lesson 1908 — Object Shape and Property OrderLesson 1912 — Initializing Objects Consistently
- Hidden dependencies
- A MINOR update pulls in a transitive dependency with breaking changes
- Lesson 2526 — Semver in Practice: Trust and Reality
- Hiding sensitive data
- Lesson 685 — ToJSON Method
- Hierarchical (nested) states
- with automatic entry/exit logic
- Lesson 2433 — FSM Libraries: XState Overview
- hierarchy
- that reduces duplication and models real-world relationships naturally.
- Lesson 2431 — Nested and Hierarchical StatesLesson 2664 — Nested Describe Blocks for Hierarchical Structure
- High water mark reached
- When the buffer size exceeds a threshold (default 16KB), `write()` returns `false`
- Lesson 1576 — How Backpressure Works Internally
- High-frequency updates
- Continuous data streaming (audio buffers, game state, sensor data)
- Lesson 2179 — PostMessage vs Shared Memory: When to Use Each
- High-resolution
- provides fractional milliseconds (microsecond precision)
- Lesson 1920 — Performance.now for High-Resolution Timing
- higher-order function
- is simply a function that does at least one of these two things:
- Lesson 435 — The Higher-Order Function ConceptLesson 439 — What Makes a Function Higher-Order
- Historical Changes
- Countries occasionally change their timezone rules permanently.
- Lesson 1640 — Timezone Offset Changes Over Time
- Hoisting
- JavaScript "lifts" `var` declarations to the top of their scope before running your code, which can lead to confusing situations where you reference a variable before you've written its declaration.
- Lesson 66 — Declaring Variables with varLesson 391 — The Function Statement in BlocksLesson 2505 — Dependency Hoisting and Deduplication
- Homogeneous numeric sequences
- (pixel data, audio samples, coordinate arrays)
- Lesson 2341 — DataView vs Typed Arrays
- Hot Module Replacement (HMR)
- – updating code in the browser without full page reloads
- Lesson 2449 — Development vs Production BuildsLesson 2450 — Hot Module Replacement
- hot paths
- code that runs thousands or millions of times per second (like game loops, animations, or data processing)—this overhead can accumulate.
- Lesson 1775 — Performance ConsiderationsLesson 1786 — Performance ConsiderationsLesson 1903 — When Micro-Optimizations Do MatterLesson 2063 — For-Of Loop Performance Compared to For Loop
- Hours
- Get the remainder, divide by `3,600,000` (60 × 60 × 1000)
- Lesson 1629 — Converting Milliseconds to Human-Readable Durations
- How critical is correctness
- (mission-critical → library)
- Lesson 2413 — When to Use Libraries vs Rolling Your Own
- However
- , when expressions become complex or use less common operators, parentheses become your friend.
- Lesson 273 — When to Rely on Precedence vs Parentheses
- HTML
- , and **YAML** files—no additional plugins required for these common formats.
- Lesson 2583 — Prettier for More Than JavaScript
- HTML structure
- and **CSS styling** deeply—the three form an inseparable trio.
- Lesson 1495 — Where to Learn More About Web Development
- Huge datasets
- (tens of thousands of items or more)
- Lesson 374 — For vs ForEach vs For...of Performance
- Human readability
- Debugging or logging when you need to copy/paste binary data as text
- Lesson 2360 — Base64 Overhead and When to Avoid It
- Husky
- is a tool that makes Git hooks easy to install, configure, and share across your entire team.
- Lesson 2598 — Git Hooks and Husky
I
- I/O (Input/Output)
- Lesson 1743 — Side Effects Defined
- I/O Operations
- Lesson 1192 — What Goes in the Task Queue
- I/O-bound tasks
- spend most of their time *waiting* for external operations to complete.
- Lesson 2190 — CPU-Bound vs I/O-Bound Tasks
- IANA time zone identifiers
- like `"America/New_York"`, `"Europe/London"`, or `"Asia/Tokyo"`.
- Lesson 2213 — Time Zones with the timeZone Option
- Ideal browser use cases
- Lesson 2196 — Workers in Node.js vs Browser Contexts
- Ideal Node.js use cases
- Lesson 2196 — Workers in Node.js vs Browser Contexts
- Identify real bottlenecks
- find the slowest 20% causing 80% of problems
- Lesson 1901 — The Danger of Premature Optimization
- Identify the hot paths
- functions consuming the most time
- Lesson 1905 — The 80/20 Rule in PerformanceLesson 1931 — The 80/20 Rule in Performance Work
- Identify the loop variable
- which variable controls the condition?
- Lesson 339 — Avoiding Infinite Loops in While
- Identify the real bottleneck
- using DevTools Performance tab or heap snapshots
- Lesson 1918 — Why Measurement Matters
- If false
- Skip the loop body entirely and continue with code after the loop
- Lesson 338 — While Loop Execution Flow
- If the promise rejects
- An exception is thrown at that line
- Lesson 1353 — Why Try/Catch Works with Async Functions
- Ignore everything else
- until measurements prove it matters
- Lesson 1931 — The 80/20 Rule in Performance Work
- Ignored Promises
- `forEach` doesn't collect return values, so your awaited Promises just float away unhandled
- Lesson 1390 — Awaiting in Loops Without Intent
- Image processing pipelines
- Workers reading/writing pixels in shared image buffers
- Lesson 2189 — When SharedArrayBuffer Makes Sense
- Images
- Can be inlined as Base64 data URLs (for small files), copied to the output directory with hashed filenames, or returned as file paths
- Lesson 2448 — Asset Pipeline Integration
- immediately
- when you create the promise.
- Lesson 1265 — Creating a Promise with the ConstructorLesson 1592 — Buffer Performance ConsiderationsLesson 2020 — Async Iteration vs Sync IterationLesson 2048 — Async Generators vs Promise ArraysLesson 2385 — Leading vs Trailing Edge Debounce
- Immediately exits
- the function, stopping any further code from running
- Lesson 418 — What Return Statements Do
- immediately-invoked function expression (IIFE)
- to fix the loop closure trap.
- Lesson 503 — Fixing Loop Closures with IIFELesson 527 — Solving Loop Closures with IIFEs
- Immer
- make immutable updates feel as easy as writing regular mutating code.
- Lesson 1762 — Immutability Helpers and Libraries
- Immutable
- Once created, a primitive value cannot be changed.
- Lesson 31 — The Seven Primitive TypesLesson 41 — Primitives Are ImmutableLesson 182 — Immutability: All Methods Return New StringsLesson 962 — Concatenating Arrays with Spread
- Implementing undo/redo features
- Keeping snapshots of previous states is trivial when you never change existing arrays.
- Lesson 837 — When to Prefer Non-Mutating Methods
- Implicit Binding
- When a function is called as a method on an object
- Lesson 538 — The Four Binding Rules PreviewLesson 581 — Event Handlers and 'this'Lesson 649 — How 'this' Works in Method Calls
- Implicit coercion
- happens automatically—JavaScript does it for you without asking.
- Lesson 274 — What is Type Coercion?
- Improve debugging
- – Clear names like `InsufficientFundsError` beat generic `Error` messages
- Lesson 1151 — Why Custom Error Classes
- Impure
- (mutates external state):
- Lesson 1744 — Pure vs Impure: Comparison ExamplesLesson 1749 — Purity and Closures
- Impure functions
- (results depend on external state, not just arguments)
- Lesson 2378 — When Memoization Helps Performance
- In a regular function
- Lesson 400 — Arrow Functions and the Arguments Object
- In an arrow function
- Lesson 400 — Arrow Functions and the Arguments Object
- In assignments with operations
- Lesson 1349 — Await Expressions Can Be Used Anywhere
- In Browsers
- Lesson 2027 — Built-in Async Iterables
- In chained calls
- Lesson 556 — Debugging 'this' with Console Logging
- In conditionals
- Lesson 1349 — Await Expressions Can Be Used Anywhere
- In function arguments
- Lesson 1349 — Await Expressions Can Be Used Anywhere
- In Node.js
- The exact same V8 engine runs JavaScript on servers and computers (outside the browser)
- Lesson 10 — V8: Chrome and Node.jsLesson 2027 — Built-in Async Iterables
- in parallel
- (concurrently).
- Lesson 1310 — Common Pitfalls: Sequential vs ConcurrentLesson 2551 — Running Scripts Across Workspaces
- In return statements
- Lesson 1349 — Await Expressions Can Be Used Anywhere
- In template literals
- Lesson 1349 — Await Expressions Can Be Used Anywhere
- In this lesson
- , you'll learn how to iterate over an object's own enumerable properties using a `for.
- Lesson 355 — For...in with ObjectsLesson 410 — The Arguments ObjectLesson 501 — The Loop Closure TrapLesson 564 — bind() for Event HandlersLesson 748 — Instance Properties: Where They LiveLesson 750 — The new Keyword with ClassesLesson 781 — Declaring Static MethodsLesson 915 — What is Array Destructuring? (+3 more)
- Include context
- Lesson 1150 — Best Practices for Throwing Errors
- Incomplete Type Coverage
- Advanced TypeScript features like mapped types, conditional types, and template literal types either don't work or require awkward workarounds in JSDoc.
- Lesson 2621 — Editor Support and Limitations
- Inconsistent handling
- Different callbacks might handle errors differently
- Lesson 1244 — Error Handling Complexity
- Inconsistent Tooling
- While VS Code excels at JSDoc inference, other editors vary widely in quality.
- Lesson 2621 — Editor Support and Limitations
- Incremental file building
- Adding sections to a report over time
- Lesson 1521 — Appending to Files with fs.appendFile()
- Independent Operations
- Lesson 1313 — Use Cases for allSettledLesson 1365 — Identifying Independent Async Operations
- index
- is useful:
- Lesson 441 — Map's Callback ParametersLesson 446 — Filter's Callback ParametersLesson 801 — Reading Elements with Bracket NotationLesson 851 — Map's Callback ParametersLesson 861 — Reduce Signature: Accumulator, Current, Index, ArrayLesson 879 — Understanding Array.prototype.findIndex()Lesson 882 — Callback Parameters: element, index, arrayLesson 884 — Performance Characteristics and Use Cases (+2 more)
- Index 0
- The path to the Node.
- Lesson 1497 — Process.argv: Command-Line ArgumentsLesson 1700 — Accessing Captured Values with exec()
- Index 1, 2, 3
- The captured values from each group (in order)
- Lesson 1700 — Accessing Captured Values with exec()
- IndexedDB
- Offline applications, large datasets, complex queries
- Lesson 1493 — Browser Storage Mechanisms
- infinite iterator
- keeps producing values indefinitely, which is useful for things like generating unique IDs, creating number sequences, or simulating ongoing events.
- Lesson 1093 — Infinite IteratorsLesson 2051 — Fibonacci as an Infinite Iterator
- Infinite or unknown-length data
- Generate values indefinitely or until a condition is met
- Lesson 1127 — When to Choose Lazy vs. Eager
- Infinite scroll
- Load more content as the user scrolls near the bottom.
- Lesson 1478 — IntersectionObserver
- Infinite sequences
- become possible:
- Lesson 1119 — What Makes a Sequence Lazy?Lesson 2055 — When Lazy Evaluation WinsLesson 2065 — When Iterators Beat Arrays: Infinite and Large Sequences
- Infinity behaves mathematically
- Lesson 208 — Comparing Numbers
- Infrequent communication
- Occasional messages between main thread and workers
- Lesson 2179 — PostMessage vs Shared Memory: When to Use Each
- Inheritance complicates analysis
- Subclasses might rely on parent methods in unpredictable ways
- Lesson 2471 — Tree Shaking Class Methods
- Inherited properties
- from the prototype chain
- Lesson 641 — Object.keys() for Own Enumerable String KeysLesson 701 — Prototypes vs Own PropertiesLesson 704 — Property Lookup Performance
- initial value
- for the accumulator to start from
- Lesson 453 — What Reduce DoesLesson 455 — The Initial Value ArgumentLesson 457 — Summing Numbers with ReduceLesson 860 — Understanding Reduce: The Swiss Army Knife of Array MethodsLesson 862 — The Initial Value: When to Provide It and Why
- Initialization
- is the moment you give a variable its first value.
- Lesson 70 — Variable InitializationLesson 342 — The For Loop StructureLesson 346 — Multiple Variables in For Loops
- Initialization runs once
- Any setup code at the top level of a module executes only on the first import.
- Lesson 1407 — Modules Are Singletons
- Initialize a project
- Lesson 2529 — Installing and Using Yarn
- Initialize counters at 0
- unless you have a specific reason not to
- Lesson 349 — Classic Off-by-One Errors
- Initialized Map
- Pass an iterable of `[key, value]` pairs (typically an array of arrays) to create a Map with initial entries.
- Lesson 1032 — Creating a New Map
- Initializing arrays
- Lesson 890 — The Array.prototype.fill() Method
- Inline errors
- Red squiggles appear when you pass wrong types or access nonexistent properties
- Lesson 2648 — Editor Experience with JSDoc
- Inline module code
- directly where it's needed
- Lesson 1437 — Cache Behavior in Development vs Production
- Inline snapshots
- solve this by embedding the snapshot value directly in your test code using `toMatchInlineSnapshot()`.
- Lesson 2710 — Inline Snapshots
- Inner layers (filling)
- Pure functions — business logic, transformations, calculations
- Lesson 1751 — When Impurity Is Unavoidable
- Input
- We store "Alex" in a variable called `userName`
- Lesson 30 — Your First Complete JavaScript Program
- Input lag
- Button clicks feel delayed or ignored
- Lesson 2191 — Main Thread Blocking and User Experience
- Inserting elements immutably
- Lesson 912 — Replacing .splice() with Spread and Slice
- Inside the function
- Lesson 556 — Debugging 'this' with Console Logging
- Inside try/catch
- Use `return await` when you want errors caught by a local try/catch block:
- Lesson 1350 — Await and Return Values
- inside-out
- or **right-to-left**, which is the opposite of how we naturally think.
- Lesson 478 — Manual Composition with Nested CallsLesson 1778 — Manual Composition: Nested Calls
- Install
- Run the installer and follow the prompts (default settings work fine)
- Lesson 29 — Setting Up a Local Development Environment
- Install all dependencies
- Lesson 2529 — Installing and Using Yarn
- Install the Compatible Version
- Lesson 2506 — Dealing with Peer Dependency Conflicts
- Installing dotenv
- Lesson 1512 — Using .env Files with dotenv
- Installs exact versions
- from the lockfile, no resolution attempts
- Lesson 2494 — npm ci for Reproducible Installs
- Instance → Child prototype
- Your instance's `__proto__` points to `ChildClass.
- Lesson 775 — The Prototype Chain with Extends
- Instance methods
- can access private instance fields directly:
- Lesson 794 — Accessing Private Fields in Methods
- Instead of `pop()`
- Lesson 907 — Avoiding Array.push, .pop, .shift, and .unshift
- Instead of `push()`
- Lesson 907 — Avoiding Array.push, .pop, .shift, and .unshift
- Instead of `shift()`
- Lesson 907 — Avoiding Array.push, .pop, .shift, and .unshift
- Instead of `unshift()`
- Lesson 907 — Avoiding Array.push, .pop, .shift, and .unshift
- Integration tests
- verify that multiple components work together correctly.
- Lesson 2671 — Balancing Test Granularity
- Inter-process communication
- Processes can signal each other by PID
- Lesson 1501 — Process.pid and Process.ppid
- Interpolation
- of variables within translated messages
- Lesson 2253 — Deciding Between Built-ins and Libraries
- Interpretation
- means reading and executing code line-by-line, on the fly.
- Lesson 14 — Interpretation vs Compilation
- Intl.PluralRules
- solves this by encapsulating the Unicode CLDR plural rules for every locale.
- Lesson 1659 — Intl.PluralRules Overview
- IoT (Internet of Things)
- JavaScript can control smart home devices, robots, and even drones.
- Lesson 5 — JavaScript Beyond the Browser
- ISO 8601
- formatted strings (YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss.
- Lesson 1616 — Date.parse for String to Timestamp Conversion
- ISO 8601 date-only format
- (like `"2024-03-15"`) is interpreted as **UTC midnight**
- Lesson 1635 — The Date Constructor's Timezone Trap
- ISO 8601 date-only strings
- (like `"2024-03-15"`) are parsed as **UTC midnight**
- Lesson 1618 — Parsing Ambiguity with Local vs UTC
- Isolation
- Variables inside an IIFE don't leak into the outer scope:
- Lesson 386 — Immediately Invoked Function Expressions (IIFE)
- iterable
- is an object that *produces* an iterator.
- Lesson 2010 — Making Your Own Iterable ObjectLesson 2011 — Iterables vs IteratorsLesson 2014 — Reusable vs Single-Use Iterators
- iterables
- they follow a special contract called the **Iterator Protocol**.
- Lesson 360 — Iterables and the Iterator ProtocolLesson 841 — Array.from with IterablesLesson 1083 — Iterators vs Array-likesLesson 2322 — Creating Typed Arrays from Iterables
- Iteration awkwardness
- There's no simple, direct way to iterate over just the data you stored without worrying about inherited properties.
- Lesson 1065 — Object vs Map: When Objects Fall Short
- iterator
- that lets you loop through every match, with full details including capture groups for each one.
- Lesson 162 — matchAll(): Iterating Over All MatchesLesson 360 — Iterables and the Iterator ProtocolLesson 1096 — What Are Generator Functions?Lesson 2011 — Iterables vs Iterators
- iterator object
- with a `next()` method.
- Lesson 1012 — Symbol.iterator for Custom IterationLesson 1026 — Implementing Custom Iterators with Symbol.iteratorLesson 1074 — The Symbol.iterator MethodLesson 2008 — What Symbol.iterator ProvidesLesson 2009 — The Iterator Object Contract
- Iterator Protocol
- .
- Lesson 360 — Iterables and the Iterator ProtocolLesson 1073 — What Is the Iterator Protocol?
- iterator result object
- , and it's the standard way iterators communicate their state.
- Lesson 1075 — The Iterator Result ObjectLesson 1101 — The Value and Done Properties
- Iterator Reuse Patterns
- The iterable-iterator pattern (where an object can spawn fresh iterators) is more explicit and debuggable when written manually.
- Lesson 1095 — When Custom Iterators Beat Generators
J
- Japanese
- has *no* grammatical plurals at all
- Lesson 2228 — Understanding Pluralization Across Languages
- JavaScript engine
- is a special program that reads your JavaScript code and executes it.
- Lesson 9 — What is a JavaScript Engine?
- JavaScript is an implementation
- (the actual language you write code in).
- Lesson 3 — JavaScript vs ECMAScript
- JavaScript Object
- Lesson 677 — What is JSON?
- JavaScript the language
- doesn't include things like `document`, `window`, `alert()`, or `getElementById()`.
- Lesson 1490 — The DOM and Window as Browser-Specific APIs
- JavaScript.info
- covers browser environments, DOM manipulation, and events in depth
- Lesson 1495 — Where to Learn More About Web Development
- Jest
- has been the dominant test runner for years, especially in React projects.
- Lesson 2652 — The Test Runner Landscape
- JIT compilation
- a hybrid approach that combines the best of both worlds.
- Lesson 14 — Interpretation vs Compilation
- JS
- when you need programmatic configuration or complex logic.
- Lesson 2565 — Understanding ESLint Configuration Files
- JS heap size
- Total memory your JavaScript is using
- Lesson 1893 — Performance Monitor for Memory Trends
- JSDoc
- to document your internal function signatures and type shapes.
- Lesson 2650 — The Pragmatic Middle Ground
- JSDoc with `@ts-check`
- offers type safety without the complexity of TypeScript's compiler, configuration files, and build pipeline.
- Lesson 2643 — Assessing Project Complexity and Team Size
- JSON
- stands for **JavaScript Object Notation**.
- Lesson 677 — What is JSON?Lesson 687 — JSON vs JavaScript ObjectsLesson 2270 — Request Body and Body TypesLesson 2565 — Understanding ESLint Configuration FilesLesson 2583 — Prettier for More Than JavaScript
- JSON (as text)
- Lesson 677 — What is JSON?
- JSON output for scripting
- Lesson 2491 — npm list and Viewing Installed Packages
- JSON parsing
- produces `any`-typed data that bypasses all checks
- Lesson 2632 — Why Runtime Validation Matters
- JSON serialization
- and **simple data structures**.
- Lesson 1069 — When Objects Still Win: JSON and Plain Data
- Just-In-Time (JIT) compilation
- is JavaScript's clever solution that combines both approaches.
- Lesson 15 — Just-In-Time (JIT) Compilation
K
- Keep `||` when
- Lesson 1950 — Replacing || with ??
- Keep callbacks if
- Lesson 1262 — Balancing Pragmatism and Refactoring
- Keep class definitions clean
- by separating *what* the code does from *how* it's enhanced
- Lesson 2067 — What Decorators Are and Why They Exist
- Keep internal properties private
- while exposing a clean interface
- Lesson 658 — What Are Getters and Setters?
- Keep your interface clean
- users access it like a property, not a method
- Lesson 659 — Defining Getters with the 'get' Keyword
- Key differences from slice
- Lesson 175 — Extracting with substring and substr
- Key type limitations
- Object keys are always converted to strings (or symbols).
- Lesson 1065 — Object vs Map: When Objects Fall Short
- Key-value pairs
- → Consider `Object` or `Map`
- Lesson 1072 — Decision Framework: Choosing the Right Collection
- Keyboard shortcuts
- Lesson 21 — Running JavaScript in the Browser Console
- keys
- (or property names) does this collection have?
- Lesson 359 — For...of vs For...in: Key DifferencesLesson 589 — What is an Object Literal?
- keywords
- written in all lowercase letters — they're not strings, so they have no quotes around them.
- Lesson 192 — The Boolean Type and Its Two ValuesLesson 2485 — npm init and Creating package.jsonLesson 2492 — npm search and Finding Packages
L
- label
- is a name you attach to a loop, letting you specifically target that loop with `break` or `continue` statements—even from inside nested loops.
- Lesson 366 — Labeled statements: Targeting specific loopsLesson 2613 — Object Type Shapes with Inline Syntax
- large collections
- with frequent lookups by key, Map typically outperforms objects.
- Lesson 1071 — Collection Size and Memory ConsiderationsLesson 1763 — Performance Considerations with Immutability
- Large data files
- JSON fixtures or configuration that would slow Prettier down
- Lesson 2579 — Ignoring Files with .prettierignore
- Large datasets
- When processing millions of items where only a subset is needed, iterators avoid allocating massive arrays upfront.
- Lesson 2065 — When Iterators Beat Arrays: Infinite and Large Sequences
- Large identifiers
- like database IDs, cryptographic keys, or API tokens often exceed the safe integer range.
- Lesson 126 — When to Use BigInt Instead
- Largest Contentful Paint (LCP)
- When the largest visible content element finishes rendering.
- Lesson 1926 — Real User Monitoring Metrics
- last
- property.
- Lesson 596 — Trailing Commas and ReadabilityLesson 808 — Trailing Commas in Array LiteralsLesson 920 — Destructuring the Rest with ... OperatorLesson 944 — Rest Elements in Nested PatternsLesson 984 — Rest in Object DestructuringLesson 988 — Rest Pattern Order MattersLesson 1205 — Zero Delay Doesn't Mean Immediate
- last value
- .
- Lesson 215 — The || (OR) OperatorLesson 223 — Logical Operators Return Operands, Not Booleans
- Latest
- The absolute newest published version, regardless of your version constraints
- Lesson 2493 — npm outdated and Version Checking
- Launch
- Open VS Code—you'll see a welcome screen
- Lesson 29 — Setting Up a Local Development Environment
- lazy
- (also called "non-greedy" or "reluctant").
- Lesson 1686 — Greedy vs Lazy QuantifiersLesson 1688 — Common Quantifier PitfallsLesson 1733 — Greedy vs Lazy QuantifiersLesson 2049 — What Makes an Iterator LazyLesson 2128 — Observables vs Promises
- lazy evaluation
- values are produced only when requested.
- Lesson 1098 — The Yield KeywordLesson 1119 — What Makes a Sequence Lazy?
- Lazy loading images
- Only load images when they're about to appear on screen, saving bandwidth and improving page load time.
- Lesson 1478 — IntersectionObserver
- Lazy sequences
- (generators) compute values *on demand*, one at a time.
- Lesson 1127 — When to Choose Lazy vs. EagerLesson 2059 — Iterator Memory Overhead vs Direct Array Access
- Leading
- Button clicks, game controls — you want instant feedback but prevent spamming
- Lesson 2385 — Leading vs Trailing Edge DebounceLesson 2389 — Leading and Trailing Options in Throttle
- leading edge
- (also called "immediate") and **trailing edge** (the default).
- Lesson 2385 — Leading vs Trailing Edge DebounceLesson 2389 — Leading and Trailing Options in Throttle
- Leading/trailing edge control
- Fine-tune when your function fires
- Lesson 2392 — Using Lodash or Underscore Implementations
- learning
- or want full control over the implementation
- Lesson 2382 — Libraries and Built-In ApproachesLesson 2413 — When to Use Libraries vs Rolling Your Own
- Learning curve
- New team members must understand *why* each rule exists
- Lesson 2606 — The Cost of Configuration
- Left
- (traditionally for errors) and **Right** (for success values).
- Lesson 1167 — Result Types and Either Pattern
- left-to-right
- .
- Lesson 271 — Associativity: Left-to-Right vs Right-to-LeftLesson 317 — Combining Logical Operators in Conditions
- Legacy Node.js projects
- built before ES modules became stable
- Lesson 1449 — When to Use CommonJS in Modern Projects
- Legacy systems
- Older APIs that don't support binary data
- Lesson 2360 — Base64 Overhead and When to Avoid It
- length
- Lesson 839 — Array Constructor vs Array.ofLesson 2323 — Creating Typed Arrays from ArrayBuffer
- Less repetitive code
- No need to write `array[0]`, `array[1]`, repeatedly
- Lesson 915 — What is Array Destructuring?
- lexical binding
- (closures capturing outer variables) becomes the right tool.
- Lesson 540 — When Lexical Binding MattersLesson 545 — Preview: Arrow Functions Break the RulesLesson 565 — Binding Arrow Functions (Spoiler: It Doesn't Work)Lesson 571 — Lexical 'this' vs Dynamic 'this'
- Lexical scope
- (also called **static scope**) means that a function's access to variables is determined by its physical location in the code when you *write* it, not where you *call* it.
- Lesson 82 — Lexical ScopeLesson 88 — Scope and Closures PreviewLesson 486 — What is Lexical Scope?Lesson 491 — Nested Functions and Scope AccessLesson 535 — Dynamic Binding ExplainedLesson 539 — Lexical Variables vs 'this'
- Lexical Variables Are Clearer
- Lesson 569 — When Not to Use Explicit Binding
- lexically capture
- `this` from their surrounding (enclosing) scope at the moment they're defined.
- Lesson 396 — Arrow Functions and 'this' BindingLesson 573 — Callbacks and Lexical 'this'
- lexicographically
- (dictionary order), character by character using Unicode values:
- Lesson 63 — Relational Operators: <, >, <=, >=Lesson 64 — String and Number ComparisonsLesson 206 — Greater Than and Less ThanLesson 209 — String Comparison
- Libraries
- (like Lodash) give you helpful utility functions
- Lesson 7 — The JavaScript EcosystemLesson 1449 — When to Use CommonJS in Modern ProjectsLesson 2457 — Rollup's ES module-first approach
- LIFO
- (Last In, First Out) order means the most recent function must complete before control returns to earlier ones.
- Lesson 1184 — Visualizing the Stack During Execution
- Lightweight
- No performance cost or complex patterns needed
- Lesson 1829 — Convention-Based Privacy with Underscore Prefix
- Limited Data Types
- Lesson 678 — JSON Syntax Rules
- Limited locale support
- You're targeting a specific set of locales, not 100+ languages
- Lesson 2247 — Identifying Simple i18n Requirements
- Line Coverage
- tracks which lines of code were executed.
- Lesson 2716 — What Code Coverage MeasuresLesson 2718 — Reading Coverage ReportsLesson 2719 — Branch Coverage vs Line Coverage
- Lint-staged
- is a tool that runs linters (like ESLint) and formatters (like Prettier) **only on Git-staged files**— the ones you're about to commit.
- Lesson 2593 — What is Lint-Staged?
- List of unique tags
- Set (uniqueness enforced)
- Lesson 1072 — Decision Framework: Choosing the Right Collection
- literal syntax
- , **immediate readability**, and **universal compatibility** with JSON APIs and serialization.
- Lesson 1069 — When Objects Still Win: JSON and Plain DataLesson 1665 — Creating Regex Patterns: Literals vs Constructor
- Little-endian
- Least significant byte first (reversed order)
- Lesson 2329 — Byte Order and EndiannessLesson 2339 — Endianness in DataView
- Live Server
- Lets you preview HTML files in your browser instantly
- Lesson 29 — Setting Up a Local Development Environment
- loaders
- (Webpack) or **plugins** (Rollup/Vite) to process non-JS files.
- Lesson 2448 — Asset Pipeline IntegrationLesson 2455 — Webpack's core concepts: entry, output, loaders, plugins
- Local (project-level)
- Installed in the current project's `node_modules` folder.
- Lesson 2487 — Local vs Global Installations
- Local scope operations
- If you create an array within a function and manipulate it before returning, mutation is safe because no external code can access that intermediate state:
- Lesson 914 — When to Mutate: Performance Trade-Offs
- local timezone
- .
- Lesson 1623 — Getting Time Components: getHours, getMinutes, getSecondsLesson 1635 — The Date Constructor's Timezone Trap
- Local variables
- Any variables declared inside the function
- Lesson 1183 — Stack Frames and Function Context
- locale
- specifies the language (e.
- Lesson 1655 — Creating a RelativeTimeFormat InstanceLesson 2218 — Common Pitfalls and Best PracticesLesson 2229 — Intl.PluralRules Constructor and OptionsLesson 2234 — Intl.Collator Constructor and OptionsLesson 2241 — Intl.DisplayNames: Getting Localized Names for Codes
- Locales
- can be a string like `'en-US'` or an array of locale identifiers.
- Lesson 2220 — Creating a RelativeTimeFormat Instance
- Localization is required
- Your interface must adapt to the user's locale, not just translate static strings
- Lesson 2246 — When to Use ListFormat and DisplayNames
- Locks you into assumptions
- made by all parent classes
- Lesson 1852 — Inheritance Hierarchies That Are Too Deep
- Lodash
- and **Underscore** have been refined through years of real-world use, handling edge cases you might not anticipate.
- Lesson 2392 — Using Lodash or Underscore Implementations
- Lodash memoize
- provides a robust memoization utility with features like:
- Lesson 2382 — Libraries and Built-In Approaches
- Log suspicious activity
- Track rejected messages for security monitoring
- Lesson 2178 — Security: Validating Message Origins
- Logging
- Including the PID in log files helps you correlate logs when multiple instances run simultaneously
- Lesson 1501 — Process.pid and Process.ppidLesson 1521 — Appending to Files with fs.appendFile()Lesson 2080 — Accessor Decorators (Getters and Setters)
- Logging without limits
- Lesson 1876 — Growing Arrays and Objects
- Logging/analytics
- where failure of one tracker shouldn't block others
- Lesson 1317 — allSettled for Independent Operations
- Logic
- We combine text pieces to build a custom message
- Lesson 30 — Your First Complete JavaScript ProgramLesson 1821 — Functional Mixins
- Logic errors
- Valid syntax but likely bugs (unused variables, unreachable code)
- Lesson 2602 — What Linters Actually DoLesson 2603 — Automation vs. Human Judgment
- Logic is stateless
- Utility functions like `formatCurrency(amount)` don't need object wrappers.
- Lesson 1859 — When to Use OOP vs Other Paradigms
- Long
- Default setting, best for readable prose and accessibility
- Lesson 1658 — Style Options: Long, Short, and NarrowLesson 2239 — ListFormat Styles: Long, Short, and Narrow
- Long-lived Objects
- Server connections, database pools, or any object that emits status updates throughout its lifetime
- Lesson 2424 — Event Emitter Use Cases and Alternatives
- Look for yellow nodes
- in the snapshot summary—these indicate detached DOM elements
- Lesson 1891 — Identifying Detached DOM Nodes
- Look outward
- to the nearest enclosing regular function or global scope
- Lesson 579 — Debugging 'this' in Arrow Functions
- Lookahead
- and **lookbehind** are zero-width assertions.
- Lesson 1711 — What Are Lookahead and Lookbehind?
- Looping through property names
- Lesson 602 — Dynamic Property Access with Variables
- Loose equality (`==`)
- allows comparison between BigInt and Number by converting values
- Lesson 131 — Comparison and Equality with BigIntLesson 301 — Strict vs Loose Equality
- Lost context
- By the time an error surfaces, you've lost track of which operation failed
- Lesson 1244 — Error Handling Complexity
- Lost domain meaning
- When variable names like `data`, `fn`, and `x` replace meaningful business terms, you've abstracted away clarity.
- Lesson 1796 — Recognizing Over-Abstraction in Functional Code
- Lost variables
- You can't inspect values from outer scopes that have already finished
- Lesson 1250 — Debugging Nested Callbacks
- LTS (Long Term Support)
- The stable, recommended version for most users
- Lesson 2484 — Installing Node.js and NPM
M
- main thread
- which also handles UI updates, user interactions, and page rendering.
- Lesson 2147 — What Are Web Workers?Lesson 2169 — Basic PostMessage Syntax: Sender and ReceiverLesson 2170 — Listening for Messages: The Message EventLesson 2191 — Main Thread Blocking and User Experience
- Main thread receiving responses
- Lesson 2149 — Communicating with postMessage
- Maintainability
- Update JavaScript in one place instead of hunting through HTML
- Lesson 23 — External JavaScript FilesLesson 1396 — What Are ES Modules?
- Maintainability first
- Public APIs, shared libraries, code worked on by large teams.
- Lesson 1933 — Trade-offs: Speed vs Readability vs Maintainability
- Maintainable
- Clear initialization prevents accidental TDZ errors
- Lesson 99 — Best Practices: Declare Before UseLesson 2198 — Introduction to Intl.NumberFormat
- Maintenance and Stability
- Node's test runner is stable but still maturing.
- Lesson 2661 — Choosing the Right Test Runner
- Maintenance burden increases
- more code to test, document, and update
- Lesson 1855 — Premature Abstraction and Speculative Generality
- Maintenance nightmares
- Tracking down which script owns which global is painful
- Lesson 1466 — Global Namespace Pollution
- MAJOR
- Breaking changes (18 → 20 means incompatible updates)
- Lesson 2484 — Installing Node.js and NPMLesson 2518 — What is Semantic Versioning?Lesson 2519 — MAJOR: Breaking Changes
- Major Framework Ecosystems
- Popular libraries like Angular, NestJS, and TypeORM were built entirely on legacy decorators.
- Lesson 2105 — When You Might Still See Legacy Decorators
- Make hooks fail gracefully
- If hooks don't install (Windows issues, permission problems), developers should see clear error messages, not silent failures.
- Lesson 2601 — Team Adoption and Best Practices
- Make quick inline decisions
- Lesson 229 — When to Use Ternary vs If/Else
- Makes changes risky
- because modifying a parent affects all descendants
- Lesson 1852 — Inheritance Hierarchies That Are Too Deep
- Manipulate the webpage
- using the DOM (Document Object Model), which represents the HTML structure
- Lesson 17 — Browser Runtime: DOM and Web APIs
- Manual clearing
- (clicking the trash icon): Great for one-off cleanups while debugging
- Lesson 1489 — Console.clear and Output Management
- Manual deep cloning
- (recursive functions or JSON tricks) is often slowest and most error-prone.
- Lesson 696 — Choosing the Right Clone Strategy
- Manual Inspection
- involves searching your production bundle file for specific function names or exports you expected to disappear.
- Lesson 2473 — Verifying Tree Shaking Results
- Manual parallel firing
- Create all promises immediately, then await them separately
- Lesson 1307 — Parallel vs All: Performance Considerations
- Manual tracing
- You must mentally reconstruct the callback chain by reading code
- Lesson 1250 — Debugging Nested Callbacks
- Many consumers
- Ten different UI elements need the same derived value
- Lesson 2143 — Derived State and Automatic Recalculation
- Map
- is a built-in JavaScript data structure that stores key-value pairs, similar to objects.
- Lesson 1031 — What is a Map and Why Use It?Lesson 1897 — Choosing the Right Data Structure
- Map keys/values
- , and even custom iterables directly into array literals.
- Lesson 965 — Spreading Iterables into Arrays
- Map then filter
- Transform everything first, then remove unwanted results
- Lesson 856 — Combining map and filter
- Maps
- two iterable data structures.
- Lesson 353 — For...of with Sets and MapsLesson 841 — Array.from with Iterables
- Maps and Sets
- store additional metadata for fast lookups, which means they use more memory per entry than plain arrays or objects.
- Lesson 1071 — Collection Size and Memory ConsiderationsLesson 2151 — What Data Can Be Transferred?
- Maps solve these problems
- Lesson 1031 — What is a Map and Why Use It?
- mark phase
- a systematic sweep through all reachable objects starting from the roots.
- Lesson 1863 — The Mark PhaseLesson 1865 — Breaking Reference Cycles
- Markdown
- , **CSS**, **HTML**, and **YAML** files—no additional plugins required for these common formats.
- Lesson 2583 — Prettier for More Than JavaScript
- Matching digits
- `\d+` matches one or more consecutive digits (like "42" or "12345").
- Lesson 1687 — Combining Classes and Quantifiers
- Matching hex colors
- `#[0-9a-fA-F]{6}` matches exactly 6 hexadecimal characters after a hash (like "#FF5733").
- Lesson 1687 — Combining Classes and Quantifiers
- Matching variable names
- `[a-zA-Z_]\w*` matches identifiers that start with a letter or underscore, followed by zero or more word characters.
- Lesson 1687 — Combining Classes and Quantifiers
- Matching words
- `\w+` matches sequences of word characters (letters, digits, underscores).
- Lesson 1687 — Combining Classes and Quantifiers
- Math.ceil
- When you need the smallest integer *greater than or equal to* a number (like calculating pages needed)
- Lesson 136 — Rounding: Math.floor, Math.ceil, Math.round, Math.trunc
- Math.ceil()
- Always rounds **up** to the nearest integer, like rising to the ceiling above you.
- Lesson 1594 — Math.round, Math.floor, and Math.ceil
- Math.floor
- When you need the largest integer *less than or equal to* a number
- Lesson 136 — Rounding: Math.floor, Math.ceil, Math.round, Math.trunc
- Math.floor()
- Always rounds **down** to the nearest integer, like dropping down to the floor below you.
- Lesson 1594 — Math.round, Math.floor, and Math.ceil
- Math.round
- When you want conventional "nearest integer" rounding
- Lesson 136 — Rounding: Math.floor, Math.ceil, Math.round, Math.trunc
- Math.trunc
- When you want to discard decimals without any rounding
- Lesson 136 — Rounding: Math.floor, Math.ceil, Math.round, Math.trunc
- MDN's JavaScript Guide
- includes browser-specific sections beyond core language features
- Lesson 1495 — Where to Learn More About Web Development
- Measure again
- confirm your optimization helped
- Lesson 1901 — The Danger of Premature OptimizationLesson 1905 — The 80/20 Rule in Performance
- Measure before and after
- – Take heap snapshots before your loop and after
- Lesson 1894 — Reproducing Leaks Systematically
- Measure the suspect operation
- using tools you've learned (`console.
- Lesson 1930 — Identifying Real Performance Problems
- Megamorphic
- sites (5+ shapes) often fall back to slow dictionary-style lookups.
- Lesson 1910 — Monomorphic vs Polymorphic Sites
- Membership testing
- (checking if a value exists) is also more efficient with Sets than arrays.
- Lesson 1044 — What is a Set?
- Memoization
- is a specific form where you cache function results based on their arguments.
- Lesson 1899 — Caching and Memoization for Repeated Work
- Memory
- tab and select "Heap snapshot.
- Lesson 533 — Debugging Closure Memory IssuesLesson 1307 — Parallel vs All: Performance ConsiderationsLesson 1860 — What is Garbage Collection?Lesson 1884 — Opening DevTools Memory ProfilerLesson 2059 — Iterator Memory Overhead vs Direct Array Access
- Memory Budgets
- "Heap size must stay under 50MB during typical use"
- Lesson 1932 — Setting Performance Budgets
- Memory constraints
- Don't load too much data simultaneously
- Lesson 1372 — Batching and Parallelism Limits
- memory efficiency
- and **code reuse**.
- Lesson 697 — What is a Prototype?Lesson 749 — Instance Methods: Defined on the PrototypeLesson 1549 — Why Use Streams?
- Memory savings
- Values aren't stored in arrays; they're generated one at a time
- Lesson 2061 — Lazy Evaluation Performance Benefits
- Memory-constrained environments
- Processing large files or streams?
- Lesson 2055 — When Lazy Evaluation WinsLesson 2059 — Iterator Memory Overhead vs Direct Array Access
- Menu systems
- Show the menu before checking if user wants to continue
- Lesson 341 — When to Use Do-While vs While
- Message translation
- across multiple languages (Intl doesn't translate text)
- Lesson 2253 — Deciding Between Built-ins and Libraries
- MessageChannel
- with dedicated ports per request, creating isolated request-response pairs without ID bookkeeping.
- Lesson 2176 — Request-Response Patterns with PostMessage
- metacharacters
- special symbols like `.
- Lesson 1668 — Literal Characters and Escaping Special CharactersLesson 1734 — Unescaped Special Characters
- method
- of that object.
- Lesson 432 — Functions as Object MethodsLesson 593 — Property Values Can Be Any TypeLesson 594 — Methods in Object LiteralsLesson 1331 — Async Function SyntaxLesson 2258 — Fetch and HTTP MethodsLesson 2259 — Sending JSON Data
- Method 3: Allocation Timeline
- Lesson 1892 — Spotting Event Listener Leaks
- Method Calls Work Fine
- Lesson 569 — When Not to Use Explicit Binding
- method chaining
- .
- Lesson 181 — Chaining String TransformationsLesson 656 — Method Chaining and Returning 'this'Lesson 1784 — Composition vs Chaining
- Method/field/accessor decorator returns nothing
- The original element stays as-is
- Lesson 2077 — Returning Values from Decorators
- Methods
- you define inside the class automatically live on the class's prototype, so all instances share the same function references in memory—efficient and organized.
- Lesson 1805 — Class-Based Object Creation ReviewLesson 1937 — What Is Optional Chaining?
- Methods are bundled together
- A class is typically treated as a single unit
- Lesson 2471 — Tree Shaking Class Methods
- Micro-benchmarks
- designed to amplify tiny differences
- Lesson 2063 — For-Of Loop Performance Compared to For Loop
- Microtask Queue
- Holds higher-priority asynchronous callbacks
- Lesson 1191 — Two Queues: Tasks and MicrotasksLesson 1194 — Microtasks Run Before TasksLesson 1200 — Mixing setTimeout and PromisesLesson 1213 — The Event Loop Flow DiagramLesson 1215 — Microtasks Always Run Before TasksLesson 1218 — Event Loop in Node vs Browser
- Microtasks
- (like Promise handlers) can't run
- Lesson 1217 — Blocking the Event LoopLesson 1218 — Event Loop in Node vs Browser
- Migration Complexity
- The two decorator systems have different signatures and behaviors.
- Lesson 2105 — When You Might Still See Legacy Decorators
- Minimal file size
- – minified code, stripped comments, shortened variable names
- Lesson 2449 — Development vs Production Builds
- MINOR
- New features, backward-compatible (20.
- Lesson 2484 — Installing Node.js and NPMLesson 2518 — What is Semantic Versioning?Lesson 2520 — MINOR: Backward-Compatible Features
- Minutes
- Get that remainder, divide by `60,000` (60 × 1000)
- Lesson 1629 — Converting Milliseconds to Human-Readable Durations
- Missed real problems
- You're too busy micro-optimizing to notice the O(n²) algorithm crushing your app
- Lesson 1928 — Premature Optimization Is the Root of All Evil
- Missing the actual bottleneck
- while polishing irrelevant sections
- Lesson 1901 — The Danger of Premature Optimization
- Missing understanding
- Disabling rules you don't understand kicks problems down the road
- Lesson 2607 — When to Disable Rules
- Mistake #1
- Thinking you can change arrow `this` with `call()`, `bind()`, or by calling it as a method.
- Lesson 579 — Debugging 'this' in Arrow Functions
- Mistake #2
- Expecting `this` to be the object when an arrow is defined as a property:
- Lesson 579 — Debugging 'this' in Arrow Functions
- mixin
- lets you copy methods from multiple objects into one, creating a new object that has abilities from different sources.
- Lesson 729 — Mixins with Object.createLesson 1808 — Mixins: Sharing Behavior Without InheritanceLesson 1820 — The Mixin Pattern
- Mixing logical operators
- `&&` with `||` can confuse readers
- Lesson 273 — When to Rely on Precedence vs Parentheses
- Mixing lookahead and lookbehind
- Lesson 1719 — Combining Multiple Assertions
- Mixing with existing APIs
- Most JavaScript functions expect Number
- Lesson 1972 — When to Use BigInt vs Number
- mixins
- (composition-based).
- Lesson 1804 — Three Approaches to Object CreationLesson 1813 — When to Choose MixinsLesson 1814 — Combining All Three ApproachesLesson 1815 — Trade-offs and Maintainability
- Mobile Devices
- Using frameworks like React Native, JavaScript builds apps for iPhones and Android phones—the same code for both platforms.
- Lesson 5 — JavaScript Beyond the Browser
- Modern best practice
- Use **function expressions** inside blocks instead:
- Lesson 391 — The Function Statement in Blocks
- Module Pattern
- combines everything you've learned about encapsulation: it wraps code in an IIFE (Immediately Invoked Function Expression) to create private scope, then returns an object exposing only the public methods you want users to access.
- Lesson 1841 — The Module Pattern
- Module resolution
- They understand your import statements and find the right files
- Lesson 2453 — What is a bundler and why do we need one?
- module scope
- variables and functions defined in one file are private by default and invisible to other files.
- Lesson 1398 — The 'export' KeywordLesson 1447 — The Module Wrapper Function
- Module/Revealing Module
- Pick these for encapsulation in older codebases or when you need private state without classes.
- Lesson 1850 — When to Use Each Pattern
- Monitor changelogs
- Read release notes for dependencies you care about
- Lesson 2526 — Semver in Practice: Trust and Reality
- monomorphic
- if it always encounters objects with the same hidden class.
- Lesson 1910 — Monomorphic vs Polymorphic SitesLesson 1913 — What Is Function Inlining?
- monorepo
- (monolithic repository) stores multiple related projects in one Git repository—think a company's design system, its React components library, and its utilities package all living together.
- Lesson 2530 — Yarn Workspaces for MonoreposLesson 2546 — What Is a Monorepo?
- Monotonic
- always increases, never jumps backward
- Lesson 1920 — Performance.now for High-Resolution Timing
- More forgiving
- JavaScript figures out many details on its own (like what type of data you're using)
- Lesson 1 — JavaScript: A High-Level Programming Language
- More readable
- You see exactly what's being combined in one expression
- Lesson 962 — Concatenating Arrays with SpreadLesson 1795 — Point-Free in Real Codebases
- More reusable
- (works with any data source)
- Lesson 1750 — Handling External Dependencies PurelyLesson 1777 — What is Function Composition?
- Mouse move tracking
- Track cursor position at controlled intervals
- Lesson 2390 — Debounce vs Throttle: When to Use Which
- much faster
- than `filter()` when you only need to know *if* something exists or want the *first* match.
- Lesson 884 — Performance Characteristics and Use CasesLesson 2532 — Installing and Using PNPM
- Multi-repo (polyrepo)
- Lesson 2546 — What Is a Monorepo?
- Multi-step pipeline
- Lesson 894 — Combining flat() with Other Array Methods
- Multi-word strings
- (requiring quotes): `"first name"`, `"user-id"`
- Lesson 590 — Property Names and Valid Keys
- Multiple argument handling
- Robust caching of all passed arguments
- Lesson 2392 — Using Lodash or Underscore Implementations
- Multiple dependencies
- `totalPrice` might depend on `items`, `taxRate`, and `discountCode`
- Lesson 2143 — Derived State and Automatic Recalculation
- Multiple event sources
- When combining user clicks, WebSocket messages, and timer events, reactive operators handle the complexity better than nested callbacks or promise chains.
- Lesson 2139 — Identifying Problems Suited for Reactive Patterns
- Multiple locales matter
- Your app serves users across different languages where list formatting rules vary (English uses commas, some languages use semicolons or different conjunctions)
- Lesson 2246 — When to Use ListFormat and DisplayNames
- Multiple operations can overlap
- Fetching data from several sources at once
- Lesson 1180 — When to Choose Sync vs Async
- Multiple references
- All variables pointing to the same array see mutations instantly
- Lesson 810 — What 'Mutating' Means for Arrays
- Multiple statements
- If either branch needs to do more than return a value, if/else is cleaner.
- Lesson 233 — Ternary Pitfalls and Readability
- Multiple statements to execute
- Lesson 229 — When to Use Ternary vs If/Else
- must
- assign a value when declaring:
- Lesson 68 — Declaring Variables with constLesson 70 — Variable InitializationLesson 212 — The Problem with NaNLesson 622 — Computed Keys with SymbolsLesson 677 — What is JSON?Lesson 770 — The super() Constructor CallLesson 771 — super() Must Come FirstLesson 1139 — Resource Cleanup Patterns (+8 more)
- mutate
- (modify) the original array directly, changing it in place.
- Lesson 810 — What 'Mutating' Means for ArraysLesson 811 — push() and pop(): Adding and Removing from the End
- mutates
- the original array and returns a reference to it.
- Lesson 820 — fill(): Replacing Elements with a Static ValueLesson 890 — The Array.prototype.fill() Method
- mutating
- (changing) the contents of that object.
- Lesson 51 — Const Prevents Reassignment, Not MutationLesson 890 — The Array.prototype.fill() Method
- Mutating methods
- modify the original array directly.
- Lesson 825 — Understanding Mutating vs Non-Mutating Methods
- Mutation is fine when
- Lesson 837 — When to Prefer Non-Mutating Methods
N
- name
- and pass the reference.
- Lesson 1228 — Anonymous vs Named CallbacksLesson 2367 — The File InterfaceLesson 2492 — npm search and Finding Packages
- Named arguments
- `{ premium: true }` is clearer than `true` in the 4th position
- Lesson 672 — Passing Configuration ObjectsLesson 1513 — Argument Parsing Libraries: minimist
- Named exports
- force explicit naming at the source.
- Lesson 1417 — When to Use Named vs DefaultLesson 1419 — Community ConventionsLesson 1543 — Named Exports and Default Exports in ESMLesson 2447 — Dead Code EliminationLesson 2468 — Export Patterns That Enable Tree Shaking
- Namespace Collisions
- Lesson 1983 — Why Private Fields?
- Namespace imports
- let you import *everything* at once, grouped under a single object name.
- Lesson 1416 — Namespace Imports
- Namespace pollution
- Without modules, large applications had variables stomping on each other
- Lesson 1396 — What Are ES Modules?
- Namespacing
- Best when you want readable, discoverable property access
- Lesson 1822 — Avoiding Mixin Name Collisions
- Namespacing with colons
- Group related tasks like `build:dev` and `build:prod` for clarity.
- Lesson 2539 — Scripts: Automating Tasks
- Naming conflicts
- Common names like `data`, `config`, or `utils` collide
- Lesson 1466 — Global Namespace Pollution
- Naming quality
- Is `processData()` descriptive enough for this context?
- Lesson 2603 — Automation vs. Human Judgment
- NaN breaks all comparisons
- Any comparison involving `NaN` returns `false`, even `NaN === NaN`:
- Lesson 208 — Comparing Numbers
- NaN's unique inequality
- `NaN` is the only JavaScript value that doesn't equal itself (`NaN !
- Lesson 2410 — Edge Cases: Null, Undefined, and NaN
- Narrow
- Ideal for compact dashboards, charts, or mobile interfaces where every character counts
- Lesson 1658 — Style Options: Long, Short, and NarrowLesson 2239 — ListFormat Styles: Long, Short, and Narrow
- Natural iteration
- Guaranteed insertion order with simple `.
- Lesson 1065 — Object vs Map: When Objects Fall Short
- negative
- result means "a comes before b"
- Lesson 899 — Descending Order with ComparatorsLesson 2227 — Common Patterns: Calculating Time Differences
- negative lookahead
- (`(?
- Lesson 1713 — Negative Lookahead Syntax (?!...)Lesson 1717 — Matching Words Not Followed by Something
- Negative Lookahead (`(?!...)`)
- Checks that a pattern *doesn't* follow
- Lesson 1711 — What Are Lookahead and Lookbehind?
- Negative Lookbehind (`(?<!...)`)
- Checks that a pattern *doesn't* precede
- Lesson 1711 — What Are Lookahead and Lookbehind?
- negative number
- if `a` should come before `b`
- Lesson 819 — sort() with Comparator FunctionsLesson 898 — Writing a Numeric ComparatorLesson 2235 — The compare() Method
- Nested objects needing independence
- → `structuredClone`
- Lesson 696 — Choosing the Right Clone Strategy
- Nested ternaries
- While technically valid, deeply nested ternaries become nearly unreadable:
- Lesson 233 — Ternary Pitfalls and Readability
- Nested translations
- or complex message structures
- Lesson 2253 — Deciding Between Built-ins and Libraries
- Nesting exceeds 3 levels
- (rightward drift is painful)
- Lesson 1262 — Balancing Pragmatism and Refactoring
- Network protocols
- HTTP headers, WebSocket frames, and API responses often use UTF-8 encoded bytes
- Lesson 2343 — Why TextEncoder and TextDecoder Exist
- Network requests
- Fetching data from a server might take seconds
- Lesson 1174 — Why JavaScript Needs Asynchronous Code
- Networking
- – creating web servers, making HTTP requests
- Lesson 18 — Node.js Runtime: Server-Side JavaScript
- never
- changes the original array.
- Lesson 850 — Map Returns a New ArrayLesson 1179 — The Misconception of 'Parallel' ExecutionLesson 1592 — Buffer Performance ConsiderationsLesson 2050 — Building an Infinite Range IteratorLesson 2709 — When Snapshots Are Updated
- Never modifies `package-lock.json`
- (read-only operation)
- Lesson 2494 — npm ci for Reproducible Installs
- Never throw synchronously
- inside stream methods—always pass errors to the callback.
- Lesson 1570 — Error Handling in Duplex and Transform
- new
- iterator with its own `index`, so both loops work independently.
- Lesson 2014 — Reusable vs Single-Use IteratorsLesson 2161 — Structured Clone for Message Passing
- new array
- containing only the elements that pass a test you define.
- Lesson 853 — Introduction to filterLesson 963 — Adding Elements with SpreadLesson 1759 — Immutable Array Updates: Removing Elements
- New Binding
- When a function is called with the `new` keyword
- Lesson 538 — The Four Binding Rules Preview
- New functions or methods
- that don't alter existing ones
- Lesson 2520 — MINOR: Backward-Compatible Features
- new string
- with all letters converted to the specified case.
- Lesson 169 — Converting Case with toLowerCase and toUpperCaseLesson 170 — Trimming Whitespace with trim, trimStart, and trimEndLesson 171 — Replacing Substrings with replace
- Nitro
- ) is Apple's JavaScript engine that runs code in Safari and any browser built with WebKit on macOS and iOS.
- Lesson 12 — JavaScriptCore: Safari's Engine
- no
- → static member.
- Lesson 789 — Static vs Instance: When to Use EachLesson 1057 — WeakMap Methods: set, get, has, deleteLesson 1072 — Decision Framework: Choosing the Right CollectionLesson 2247 — Identifying Simple i18n Requirements
- No arguments
- The callback receives nothing—it can't access resolve values or rejection reasons
- Lesson 1282 — The .finally() MethodLesson 1327 — Finally for Cleanup ActionsLesson 1601 — Math.random for Random Number Generation
- No centralized recovery
- Each error must be handled independently
- Lesson 1244 — Error Handling Complexity
- No closure access
- Unlike normal functions, `Function` constructor functions don't capture their surrounding scope — they only see global scope.
- Lesson 387 — Function Constructor (Rarely Used)
- No Comments
- Lesson 678 — JSON Syntax Rules
- No Compile-Time Enforcement
- JSDoc only helps in your editor.
- Lesson 2621 — Editor Support and Limitations
- No confusion about `this`
- you explicitly create and return objects
- Lesson 668 — What Are Factory Functions?
- No context
- The error appears isolated, disconnected from the larger operation
- Lesson 1250 — Debugging Nested Callbacks
- no context object
- with `kind`, `name`, or `addInitializer`.
- Lesson 2101 — TypeScript's Original Decorator SignatureLesson 2102 — Legacy Class and Method Decorators
- No development warnings
- – runtime checks removed to reduce bundle size
- Lesson 2449 — Development vs Production Builds
- No explosion of parameters
- One function parameter handles infinite variations
- Lesson 437 — Functions as Configuration
- No Functions or Methods
- Lesson 678 — JSON Syntax Rules
- No gender/case handling
- Many languages inflect words based on context (subject gender, grammatical case)
- Lesson 2251 — Limitations of Built-ins: No Message Translation
- No inherited properties
- Maps are clean; they only contain what you put in them
- Lesson 1031 — What is a Map and Why Use It?
- No interpolation logic
- Inserting dynamic values into translated templates while respecting word order differences across languages
- Lesson 2251 — Limitations of Built-ins: No Message Translation
- No message catalog
- `Intl` doesn't store translations like "Hello" → "Bonjour"
- Lesson 2251 — Limitations of Built-ins: No Message Translation
- No multiplexing
- each file tied up a connection until fully downloaded
- Lesson 2443 — The Module Problem in Browsers
- No native syntax support
- Languages with monads often have special syntax (like Haskell's `do` notation).
- Lesson 1799 — Functor/Monad Pattern Mismatch in JS
- No ordering requirements
- Operations can complete in any order
- Lesson 1368 — Choosing Between Sequential and Parallel
- No parentheses
- Unlike functions, class declarations don't have `()` after the name
- Lesson 745 — Declaring a Class with the class Keyword
- No pollution
- Before modern features, IIFEs were the primary way to avoid cluttering the global scope with temporary variables.
- Lesson 386 — Immediately Invoked Function Expressions (IIFE)
- No return needed
- The constructor automatically returns the new instance (just like constructor functions with `new`)
- Lesson 747 — The Constructor Method
- No return statement
- The instance is returned (normal behavior).
- Lesson 766 — Return Values from Constructors
- No text translation needed
- Your UI labels are fixed in one language, or you have only a handful of static strings
- Lesson 2247 — Identifying Simple i18n Requirements
- No Trailing Commas
- Lesson 678 — JSON Syntax Rules
- No, mostly just storing/iterating
- → `Array` or `Object` may suffice
- Lesson 1072 — Decision Framework: Choosing the Right Collection
- No, or need iteration
- → Stick with strong collections
- Lesson 1072 — Decision Framework: Choosing the Right Collection
- Node.js
- takes that same V8 engine and pairs it with *completely different* APIs designed for server-side tasks.
- Lesson 18 — Node.js Runtime: Server-Side JavaScriptLesson 19 — Deno and Bun: Alternative RuntimesLesson 1218 — Event Loop in Node vs BrowserLesson 1325 — Silent Failures: The Missing Catch TrapLesson 1380 — Browser vs Node.js Support
- Node.js 18
- , `fetch` became a **global built-in**, meaning you can use it just like you would in the browser— no imports required.
- Lesson 2265 — Fetch in Node.js
- Node.js runtime
- gives you `fs` (file system), `http` (servers), `process`
- Lesson 20 — Why Runtime Differences Matter
- non-deterministic
- either could run first depending on system performance.
- Lesson 1207 — setTimeout vs setImmediate (Node.js)Lesson 1866 — When GC Runs
- Non-deterministic installs
- Before lockfiles existed (npm added them later in v5), the same `package.
- Lesson 2527 — Why Alternative Package Managers Exist
- Non-empty strings
- `"hello"`, `"0"`, `" "` (even a space!
- Lesson 195 — Truthy Values: What Evaluates to True
- non-enumerable
- (hidden from most common operations).
- Lesson 634 — Enumerability and Property VisibilityLesson 644 — Object.getOwnPropertyNames() Includes Non-EnumerableLesson 976 — Spread and Non-Enumerable PropertiesLesson 1004 — Symbols as Object Keys
- Non-enumerable properties
- (like those with `enumerable: false`)
- Lesson 641 — Object.keys() for Own Enumerable String KeysLesson 2004 — What structuredClone Can and Cannot Clone
- Non-flagged arguments
- (positional) go into the `_` array
- Lesson 1513 — Argument Parsing Libraries: minimist
- Non-ISO or date-time strings
- without explicit timezone (like `"2024-03-15 14:30"`) are parsed as **local time**
- Lesson 1618 — Parsing Ambiguity with Local vs UTC
- Non-mutating methods
- leave the original array untouched and return a new array or value instead.
- Lesson 825 — Understanding Mutating vs Non-Mutating Methods
- non-strict mode
- , older engines might hoist it to the entire function or global scope, making it accessible outside the block.
- Lesson 391 — The Function Statement in BlocksLesson 425 — Hoisting in Block Scope
- Non-zero
- (typically 1) means "something went wrong" (error)
- Lesson 1500 — Process.exit() and Exit Codes
- normal, expected outcome
- (like a search finding no results)
- Lesson 1149 — Throwing vs Returning Error ValuesLesson 1161 — Throwing vs Returning Errors
- not
- an object—it's its own primitive type representing intentional absence.
- Lesson 33 — null: Intentional AbsenceLesson 46 — Reference Equality vs Value EqualityLesson 123 — Detecting NaN with Number.isNaNLesson 548 — Function Calls: When 'this' is Global (Non-Strict)Lesson 614 — Testing Object Mutability StatesLesson 808 — Trailing Commas in Array LiteralsLesson 828 — join() to Convert Arrays to StringsLesson 919 — Default Values in Array Destructuring (+12 more)
- not equal
- using JavaScript's inequality operators.
- Lesson 62 — Inequality Operators: != and !==Lesson 211 — Object and Array Comparison
- not hoisted
- (constructor functions are)
- Lesson 755 — Comparing Class Syntax to Constructor FunctionsLesson 756 — When to Use Class Declarations vs Expressions
- not iterable
- and have **no size property**.
- Lesson 1060 — WeakSet Basics and OperationsLesson 2017 — Iterating Non-Iterable Objects
- Notice
- The default import (`fetchData`) comes first, without braces.
- Lesson 1413 — Mixing Named and Default Exports
- Notifications API
- enables desktop-style alerts even when your page isn't visible.
- Lesson 1494 — Web APIs Beyond the DOM
- NPM (Node Package Manager)
- is a package manager for JavaScript that solves this problem.
- Lesson 2483 — What is NPM and Why It Exists
- NPX Execution
- Run the tool temporarily without installing it globally using `npx package-name`.
- Lesson 2510 — NPX vs Global Install
- Null
- represents "intentionally empty"
- Lesson 31 — The Seven Primitive TypesLesson 280 — ToString Abstract Operation
- Null check
- Handle `null` explicitly (since `typeof null === "object"`)
- Lesson 2406 — Recursive Deep Equality Algorithm
- Null's typeof lie
- Despite being a primitive, `typeof null` returns `"object"`.
- Lesson 2410 — Edge Cases: Null, Undefined, and NaN
- Nullish values
- are *only* `null` and `undefined` — values that represent the absence of a value.
- Lesson 1948 — Nullish vs Falsy Values
- Number
- any numeric value (integers and decimals)
- Lesson 31 — The Seven Primitive TypesLesson 280 — ToString Abstract OperationLesson 1585 — Reading from BuffersLesson 1614 — Date.UTC for Creating Dates in UTCLesson 1656 — Formatting Relative Time ValuesLesson 1972 — When to Use BigInt vs Number
- Number.MAX_SAFE_INTEGER
- is the largest integer JavaScript can represent with absolute precision: **9,007,199,254,740,991** (about 9 quadrillion).
- Lesson 118 — Number.MAX_SAFE_INTEGER and MIN_SAFE_INTEGER
- Number.MAX_VALUE
- represents the largest positive number JavaScript can handle—approximately `1.
- Lesson 109 — Number Constants: MIN_VALUE, MAX_VALUE
- Number.MIN_SAFE_INTEGER
- is the smallest: **-9,007,199,254,740,991** (the negative equivalent).
- Lesson 118 — Number.MAX_SAFE_INTEGER and MIN_SAFE_INTEGER
- Number.MIN_VALUE
- is trickier: it's the *smallest positive number* JavaScript can represent—approximately `5e-324`.
- Lesson 109 — Number Constants: MIN_VALUE, MAX_VALUE
- NumberFormat
- Handles decimal separators, thousand separators, and currency symbols
- Lesson 1643 — What Intl Solves: Beyond Naive Formatting
- Numbers
- → returned unchanged
- Lesson 279 — ToNumber Abstract OperationLesson 590 — Property Names and Valid Keys
- Numeric data
- Working primarily with typed arrays (Int32Array, Float64Array, etc.
- Lesson 2179 — PostMessage vs Shared Memory: When to Use Each
- numeric value
- (positive for future, negative for past)
- Lesson 2219 — What is Intl.RelativeTimeFormat?Lesson 2222 — Time Units: second, minute, hour, dayLesson 2227 — Common Patterns: Calculating Time Differences
O
- O(1) - Constant Time
- Lesson 1895 — Understanding Algorithmic Complexity (Big O)
- O(1) time complexity
- constant time, regardless of size.
- Lesson 1068 — Set Performance: Membership Tests at Scale
- O(n) - Linear Time
- Lesson 1895 — Understanding Algorithmic Complexity (Big O)
- O(n) time complexity
- as your array grows, worst-case search time grows proportionally.
- Lesson 1068 — Set Performance: Membership Tests at ScaleLesson 1997 — Performance Characteristics of findLast()
- O(n²) - Quadratic Time
- Lesson 1895 — Understanding Algorithmic Complexity (Big O)
- object
- (or array), you can still *mutate* (change) the object's properties!
- Lesson 72 — Const and Object MutabilityLesson 103 — The Number ConstructorLesson 291 — Truthy Objects That Seem FalsyLesson 610 — Object.definePropertyLesson 864 — Building Objects with ReduceLesson 893 — Fill Gotcha: Reference vs Primitive ValuesLesson 1130 — The Error ObjectLesson 1441 — Exporting Objects and Functions (+2 more)
- Object handling
- Compare key counts, ensure all keys match, then recurse on each property value
- Lesson 2406 — Recursive Deep Equality Algorithm
- Object Literals
- – Methods or properties inside plain object literals cannot use decorators.
- Lesson 2086 — When Decorators Cannot Be Used
- Object URL
- is a special temporary URL (starting with `blob:`) that points to that in-memory data.
- Lesson 2369 — Creating Object URLs
- Object.create()
- is slightly slower because it involves more setup steps—especially when you pass a second parameter defining properties.
- Lesson 730 — Performance Considerations
- objects
- .
- Lesson 31 — The Seven Primitive TypesLesson 195 — Truthy Values: What Evaluates to TrueLesson 936 — Failed Destructuring and Errors
- Objects and arrays
- including deeply nested ones
- Lesson 2004 — What structuredClone Can and Cannot Clone
- Objects with prototypes
- (class instances): Only plain data survives
- Lesson 2151 — What Data Can Be Transferred?
- Obscures behavior
- since you must trace through multiple classes to understand what a method does
- Lesson 1852 — Inheritance Hierarchies That Are Too Deep
- Observable
- is like a stream that can emit multiple values over time, and it gives you fine-grained control over when and how that stream operates.
- Lesson 2128 — Observables vs Promises
- Observables are push-based
- they actively push values to subscribers whenever new data arrives.
- Lesson 2124 — Signals vs Observables
- Observer/Pub-Sub
- Apply when you have one-to-many relationships where changes in one object should notify multiple dependents (UI updates, event systems).
- Lesson 1850 — When to Use Each Pattern
- Official spec
- Part of the JavaScript language itself
- Lesson 1449 — When to Use CommonJS in Modern Projects
- Offline development
- Local caches or proxies for network-restricted environments
- Lesson 2496 — The NPM Registry and Alternatives
- Old approach
- Decorators received the class/method *descriptor* directly and could mutate it.
- Lesson 2068 — The Stage 3 Decorators Proposal
- Older TypeScript Projects
- Many applications were built between 2015 and 2022 when only experimental decorators existed.
- Lesson 2105 — When You Might Still See Legacy Decorators
- on demand
- , not upfront.
- Lesson 1123 — Lazy Filter with GeneratorsLesson 1420 — What is Dynamic Import?Lesson 1422 — When to Use Dynamic Imports
- On subsequent runs
- Lesson 2708 — Creating Your First Snapshot
- On-demand computation
- Expensive operations run only when values are needed, not before.
- Lesson 1119 — What Makes a Sequence Lazy?
- Onboarding is faster
- because there's no "house style guide" to memorize—Prettier *is* the style
- Lesson 2584 — The Philosophy of Opinionated Formatting
- Onboarding speeds up
- New team members learn one style, not five
- Lesson 2604 — Consistent Style vs. Personal Preference
- once
- .
- Lesson 1431 — Single Execution GuaranteeLesson 1566 — The _flush MethodLesson 2071 — Class DecoratorsLesson 2257 — Reading Response BodiesLesson 2667 — Suite-Level Setup: beforeAll and afterAll
- one
- variable shared across all iterations.
- Lesson 86 — Loop Scope with letLesson 473 — Find vs Filter for Single ItemsLesson 980 — Rest Parameters SyntaxLesson 1287 — Best Practices for Then/Catch/FinallyLesson 1543 — Named Exports and Default Exports in ESMLesson 1663 — Locale-Specific Plural CategoriesLesson 1677 — Character Classes with Square BracketsLesson 2592 — Troubleshooting Editor Integration Issues
- one after another
- (where each step might depend on the previous), you could nest them — or you could use a control flow pattern that keeps your code flat and readable.
- Lesson 1258 — The Async.series PatternLesson 1276 — Chaining .then() Calls
- one at a time
- , and only when the call stack is empty.
- Lesson 1192 — What Goes in the Task QueueLesson 2032 — For-Await-Of with Promises Arrays
- one value
- against several exact matches.
- Lesson 324 — Switch vs If-Else ChainsLesson 2128 — Observables vs Promises
- One-time use
- Once iterated, the iterator is exhausted
- Lesson 162 — matchAll(): Iterating Over All Matches
- One-time utilities
- Lesson 2509 — Running One-Off Commands with NPX
- One-use abstractions
- Creating a generic helper function used exactly once is over-engineering.
- Lesson 1796 — Recognizing Over-Abstraction in Functional Code
- only
- difference is how you pass arguments:
- Lesson 560 — call() vs apply(): When to Use EachLesson 640 — Filtering Out Inherited Properties with hasOwnPropertyLesson 712 — The 'prototype' Property on FunctionsLesson 762 — Method Shorthand SyntaxLesson 1343 — Await Only Works in Async FunctionsLesson 1950 — Replacing || with ??Lesson 2571 — Flat Config: Files and Ignores
- Only enumerable properties
- By default, properties you add to an object are enumerable.
- Lesson 625 — Object.keys() for Enumerable Properties
- Only for classic workers
- Module workers use standard `import` syntax instead
- Lesson 2155 — Importing Scripts in Workers
- only if
- the logical condition is met:
- Lesson 1956 — What Logical Assignment Operators SolveLesson 1958 — The &&= (Logical AND Assignment) OperatorLesson 1959 — The ??= (Nullish Coalescing Assignment) Operator
- Only synchronous code
- is allowed—no async operations, Promises, or callbacks
- Lesson 1504 — Process Event: 'exit'
- Open/Closed Principle
- Extend behavior without changing existing code
- Lesson 1824 — The Decorator Pattern for Behavior Layering
- Opening DevTools
- Lesson 1884 — Opening DevTools Memory Profiler
- Operating system interaction
- – accessing environment variables, system info
- Lesson 18 — Node.js Runtime: Server-Side JavaScript
- Operations are independent
- No operation needs another's result
- Lesson 1368 — Choosing Between Sequential and Parallel
- operator precedence
- a built-in set of rules that determines the order of operations, just like the math rules you learned in school (remember "Please Excuse My Dear Aunt Sally"?
- Lesson 265 — What is Operator Precedence?Lesson 267 — Multiplication Before Addition
- Optimize hot paths only
- If profiling shows composition is a bottleneck (rare), inline the logic manually in that specific spot.
- Lesson 1786 — Performance Considerations
- Optimized performance
- – aggressive optimizations that take longer to compute
- Lesson 2449 — Development vs Production Builds
- Optimizing load order
- ensuring dependencies load before dependents
- Lesson 2446 — Dependency Resolution
- Option 1: Use `bind()`
- Lesson 586 — Class Methods as Callbacks
- optional
- you can leave them blank when they're not needed.
- Lesson 345 — Omitting Parts of a For LoopLesson 395 — Parentheses in Arrow Function ParametersLesson 747 — The Constructor MethodLesson 757 — The Constructor MethodLesson 1161 — Throwing vs Returning ErrorsLesson 1731 — Common Pattern: Phone Numbers and Dates
- Optional parameters
- wrap the type in square brackets or use explicit syntax:
- Lesson 2615 — Union Types and Optional Parameters
- OptionalDependencies
- are packages that enhance functionality but aren't required.
- Lesson 2541 — PeerDependencies and Optional Dependencies
- options
- object lets you control formatting behavior.
- Lesson 1655 — Creating a RelativeTimeFormat InstanceLesson 2220 — Creating a RelativeTimeFormat InstanceLesson 2258 — Fetch and HTTP Methods
- options object
- where you specify the type of plural rule you need.
- Lesson 2229 — Intl.PluralRules Constructor and OptionsLesson 2234 — Intl.Collator Constructor and OptionsLesson 2258 — Fetch and HTTP Methods
- Order doesn't matter
- Properties can appear in any sequence
- Lesson 672 — Passing Configuration ObjectsLesson 1054 — When to Use Sets vs Arrays
- Order doesn't matter much
- – Sets maintain insertion order but aren't indexed
- Lesson 1066 — Array vs Set: Handling Unique Values
- Order is critical
- When the next line absolutely cannot run until the current operation finishes
- Lesson 1180 — When to Choose Sync vs Async
- Order is not guaranteed
- While most engines iterate arrays in order, the JavaScript specification doesn't guarantee it for `for.
- Lesson 356 — For...in with Arrays: Why to Avoid
- Order isn't guaranteed historically
- Though modern engines maintain insertion order, it wasn't always reliable
- Lesson 1031 — What is a Map and Why Use It?
- order matters
- first is always the element, second is the index, third is the array.
- Lesson 441 — Map's Callback ParametersLesson 974 — Adding and Overriding PropertiesLesson 1368 — Choosing Between Sequential and Parallel
- Ordinal plurals
- express order or rank: "1st place," "2nd place," "3rd place"
- Lesson 1661 — Ordinal vs Cardinal PluralsLesson 2231 — Cardinal vs Ordinal Plurals
- Organization
- Keep HTML and JavaScript separate, making both easier to read
- Lesson 23 — External JavaScript Files
- Organize
- multiple related functions in data structures (coming soon!
- Lesson 428 — Assigning Functions to Variables
- original
- function, not on an already-bound version.
- Lesson 566 — Chaining bind() CallsLesson 2475 — What Are Source Maps?
- Original file names appear
- in the Sources panel instead of `bundle.
- Lesson 2480 — Using Source Maps in Browser DevTools
- Other Browser APIs
- Lesson 1192 — What Goes in the Task Queue
- Other Editors
- Lesson 2581 — Format-on-Save in Your Editor
- Other formats
- (like `"March 15, 2024"` or `"2024/03/15"`) are interpreted as **local timezone**
- Lesson 1635 — The Date Constructor's Timezone Trap
- Outdated extension
- – Update to the latest version; older ones may not support newer config formats
- Lesson 2592 — Troubleshooting Editor Integration Issues
- Outer layers (bread)
- Impure operations — I/O, state changes, network calls
- Lesson 1751 — When Impurity Is Unavoidable
- Output
- `console.
- Lesson 30 — Your First Complete JavaScript ProgramLesson 331 — Breaking Out of Nested Loops with LabelsLesson 332 — Continuing Outer Loops with Labeled ContinueLesson 365 — Continue in nested loops: Affects innermost iterationLesson 368 — Continuing to a label: Restarting outer loopsLesson 1177 — Asynchronous Code Execution OrderLesson 1197 — queueMicrotask ExplicitlyLesson 1203 — Debugging Task and Microtask Order (+8 more)
- Output panel
- in your editor (often View → Output, then select ESLint or Prettier from the dropdown).
- Lesson 2592 — Troubleshooting Editor Integration Issues
- Over-escaping
- Remember that only special characters like `.
- Lesson 1676 — Common Mistakes and When Regex Is Overkill
- Overly greedy dot matches
- can capture far more than intended:
- Lesson 1688 — Common Quantifier Pitfalls
- Overly point-free version
- Lesson 1798 — Point-Free Style Gone Wrong
- Override with Caution
- Lesson 2506 — Dealing with Peer Dependency Conflicts
P
- Package name
- `'lodash'` (from node_modules in Node.
- Lesson 1401 — The 'import' KeywordLesson 1444 — Requiring npm PackagesLesson 2485 — npm init and Creating package.json
- Pad string
- (optional): the character(s) to fill with (defaults to a space)
- Lesson 177 — Padding Strings with padStart and padEnd
- Page Visibility API
- to detect when your tab becomes hidden and pause timers accordingly
- Lesson 1210 — setTimeout in Background Tabs
- Parallel execution
- If tasks are independent and can run simultaneously, use `Promise.
- Lesson 2037 — When to Prefer For-Await-Of
- Parallel validations
- where you need all validation results
- Lesson 1317 — allSettled for Independent Operations
- Parallelization
- Lesson 1745 — Why Pure Functions Matter
- Parameter Decorators
- – Unlike TypeScript's experimental decorators, the Stage 3 proposal does *not* support decorating individual function parameters.
- Lesson 2086 — When Decorators Cannot Be UsedLesson 2103 — Property and Parameter Decorators in Legacy Syntax
- Parameter hints
- See expected argument types and descriptions as you call functions
- Lesson 2648 — Editor Experience with JSDoc
- parameters
- as empty slots on a form, and **arguments** as the information you write into those slots.
- Lesson 403 — Parameters vs Arguments: The DifferenceLesson 504 — Closures Over ParametersLesson 758 — Constructor ParametersLesson 1183 — Stack Frames and Function Context
- Parent prototype → Object.prototype
- Continues the standard chain
- Lesson 775 — The Prototype Chain with Extends
- Parentheses `()`
- Will eventually hold parameters (coming in future lessons)
- Lesson 379 — Function Declaration Syntax
- Parse Imports
- It reads the file and finds all `import` or `require()` statements.
- Lesson 2446 — Dependency Resolution
- Parses your code
- into an Abstract Syntax Tree (AST)—a structured representation of your code's logic
- Lesson 2602 — What Linters Actually Do
- Parsing
- (breaking data into structured chunks)
- Lesson 1564 — Transform Streams ExplainedLesson 1653 — When to Use Intl vs Third-Party LibrariesLesson 2462 — SWC and modern bundler foundations
- partial application
- you're applying *part* of the arguments now, leaving the rest for later.
- Lesson 563 — Partial Application with bind()Lesson 1764 — What Is Currying?Lesson 1768 — Currying vs Partial Application
- Partially covered branches
- If statements where only one path was tested
- Lesson 2721 — Using Coverage to Find Gaps
- PascalCase
- (capitalize the first letter) to signal *intent*:
- Lesson 733 — Constructor Functions vs Regular Functions
- PATCH
- (partial updates), **HEAD** (like GET but only retrieves headers), or **OPTIONS** (asks what methods are allowed).
- Lesson 2258 — Fetch and HTTP MethodsLesson 2268 — Request Methods and HTTP VerbsLesson 2484 — Installing Node.js and NPMLesson 2518 — What is Semantic Versioning?
- Pause
- The function freezes at that exact line
- Lesson 1339 — Async Function Execution ModelLesson 1557 — Handling Write Backpressure
- paused mode
- by default.
- Lesson 1553 — Paused vs Flowing ModeLesson 1554 — The 'readable' Event and read() Method
- pauses
- at the await point, allowing its Promise to settle before continuing.
- Lesson 1377 — Module Loading and Execution OrderLesson 1579 — Pipe's Automatic Backpressure
- PeerDependencies
- are packages your library expects the *host application* to provide, not packages you install yourself.
- Lesson 2541 — PeerDependencies and Optional Dependencies
- Pending
- The operation hasn't finished yet
- Lesson 1263 — What is a Promise?Lesson 1264 — Promise States
- Pending callbacks
- (I/O callbacks deferred from previous cycle)
- Lesson 1218 — Event Loop in Node vs Browser
- Perceived
- problems show up as vague complaints without corresponding data spikes.
- Lesson 1930 — Identifying Real Performance Problems
- Perception of slowness
- Users assume your app is broken
- Lesson 2191 — Main Thread Blocking and User Experience
- Performance
- These functions are harder for the JavaScript engine to optimize because they're created at runtime.
- Lesson 387 — Function Constructor (Rarely Used)Lesson 599 — Object Literals vs. new Object()Lesson 696 — Choosing the Right Clone StrategyLesson 719 — Why __proto__ Is Deprecated in Modern CodeLesson 1435 — Dynamic Import and the CacheLesson 1615 — Date.now for Current TimestampLesson 1762 — Immutability Helpers and LibrariesLesson 1923 — Browser DevTools Performance Tab
- Performance benefit
- The browser or runtime doesn't re-parse, re-evaluate, or re-execute module code unnecessarily.
- Lesson 1407 — Modules Are Singletons
- Performance bottlenecks
- npm installed packages sequentially and made redundant network requests, causing slow install times—sometimes taking minutes for large projects.
- Lesson 2527 — Why Alternative Package Managers Exist
- Performance critical
- Avoiding copy overhead is essential
- Lesson 2179 — PostMessage vs Shared Memory: When to Use Each
- Performance gains
- Process huge datasets without loading everything into memory.
- Lesson 1119 — What Makes a Sequence Lazy?
- Performance Impact
- Modern JavaScript engines optimize property access based on an object's prototype chain.
- Lesson 708 — Changing an Object's Prototype
- Performance is critical
- Encoding/decoding Base64 takes CPU time
- Lesson 2360 — Base64 Overhead and When to Avoid It
- Performance matters
- Faster total execution time
- Lesson 1368 — Choosing Between Sequential and Parallel
- Performance Monitor
- is a live dashboard in Chrome DevTools that shows real-time metrics while your application runs.
- Lesson 1893 — Performance Monitor for Memory Trends
- Performance Observer API
- flips this around: it *pushes* performance entries to you as they happen, letting you collect timing data without constantly checking or blocking the main thread.
- Lesson 1922 — The Performance Observer APILesson 1926 — Real User Monitoring Metrics
- Performance optimizations
- Years of refinement for speed and memory efficiency
- Lesson 2403 — Library Solutions: Lodash cloneDeep
- Performance Requirements
- Does your test suite run hundreds or thousands of tests?
- Lesson 2661 — Choosing the Right Test Runner
- Performance trade-offs
- Is this readable but slow approach acceptable here?
- Lesson 2603 — Automation vs. Human Judgment
- Performance-critical applications
- (games, real-time processing)
- Lesson 374 — For vs ForEach vs For...of Performance
- Performance-Critical Code
- Manual iterators avoid the overhead of generator function state machines, which matters in tight loops or high-frequency operations.
- Lesson 1095 — When Custom Iterators Beat GeneratorsLesson 1972 — When to Use BigInt vs Number
- Performance-critical loops
- When processing large datasets or running tight loops thousands of times, the overhead of creating new arrays on each iteration adds up.
- Lesson 914 — When to Mutate: Performance Trade-OffsLesson 2037 — When to Prefer For-Await-Of
- Pipeline transformations
- Chaining lazy operations (map, filter, take) on iterators processes one item at a time through the entire pipeline.
- Lesson 2065 — When Iterators Beat Arrays: Infinite and Large Sequences
- Piping
- is a mechanism that connects a readable stream directly to a writable stream, automatically handling the flow of data between them.
- Lesson 1572 — What is Piping?Lesson 1573 — Basic Pipe Syntax
- Plain objects have limitations
- Lesson 1031 — What is a Map and Why Use It?
- Plain properties
- are perfect for simple data storage—when you just need to hold a value without any special behavior.
- Lesson 667 — When to Use Getters/Setters vs Plain Properties
- Plug'n'Play (PnP)
- instead of extracting packages into `node_modules`, it keeps dependencies as `.
- Lesson 2528 — Yarn Classic vs Yarn Berry (v2+)
- plugins
- (Rollup/Vite) to process non-JS files.
- Lesson 2448 — Asset Pipeline IntegrationLesson 2455 — Webpack's core concepts: entry, output, loaders, pluginsLesson 2567 — What Are ESLint Plugins?
- plus
- all the variables from the outer function.
- Lesson 389 — Nested Functions and ScopeLesson 491 — Nested Functions and Scope Access
- PNPM
- typically wins installation races, especially on repeated installs.
- Lesson 2534 — Performance Comparisons: Speed and Disk UsageLesson 2549 — Workspaces in npm, Yarn, and pnpmLesson 2551 — Running Scripts Across Workspaces
- Point-free style
- Lesson 482 — Point-Free Style with Composition
- Point-free taken too far
- Eliminating all parameter names can make code unreadable when intermediate steps aren't obvious.
- Lesson 1796 — Recognizing Over-Abstraction in Functional Code
- Polish
- uses different forms for 1, 2-4, and 5+ items
- Lesson 2228 — Understanding Pluralization Across Languages
- Poorly structured code
- Needing to disable `max-lines` or `complexity` repeatedly suggests functions doing too much
- Lesson 2607 — When to Disable Rules
- position
- to start searching from (for `startsWith()`) or to treat as the end (for `endsWith()`):
- Lesson 157 — startsWith() and endsWith()Lesson 158 — indexOf(): Finding the First OccurrenceLesson 1692 — Word Boundaries: \b
- positive
- result means "b comes before a"
- Lesson 899 — Descending Order with ComparatorsLesson 2227 — Common Patterns: Calculating Time Differences
- Positive Lookahead (`(?=...)`)
- Checks that a pattern *does* follow
- Lesson 1711 — What Are Lookahead and Lookbehind?
- Positive lookbehind
- lets you check what comes *before* your pattern without "consuming" that text.
- Lesson 1718 — Matching Words Preceded by Something
- Positive Lookbehind (`(?<=...)`)
- Checks that a pattern *does* precede
- Lesson 1711 — What Are Lookahead and Lookbehind?
- positive number
- if `b` should come before `a`
- Lesson 819 — sort() with Comparator FunctionsLesson 898 — Writing a Numeric ComparatorLesson 2235 — The compare() Method
- POST
- – Create new data (like adding a new book to the library)
- Lesson 2268 — Request Methods and HTTP Verbs
- PostMessage
- Copies data between contexts (structured cloning or transferring)
- Lesson 2179 — PostMessage vs Shared Memory: When to Use Each
- Potential blocking
- Long-running functions freeze everything else until they finish
- Lesson 1187 — Single-Threaded Execution
- Powerful mocking
- Create mock functions, spy on existing functions, and mock entire modules without third-party tools.
- Lesson 2655 — Jest: The All-in-One Runner
- Powers all iOS browsers
- Due to Apple's App Store rules, even Chrome and Firefox on iOS actually use JavaScriptCore under the hood, not their own engines
- Lesson 12 — JavaScriptCore: Safari's Engine
- Practical mismatch
- JavaScript's strength is pragmatic, imperative-functional hybrids.
- Lesson 1799 — Functor/Monad Pattern Mismatch in JS
- Pre and post hooks
- `prebuild` runs automatically before `build`, `posttest` after `test`.
- Lesson 2539 — Scripts: Automating Tasks
- Pre-increment vs post-increment
- Lesson 1902 — Micro-Optimizations That Don't Matter
- predicate function
- is simply a function that returns `true` or `false`.
- Lesson 467 — Every with Predicate FunctionsLesson 470 — Some with Predicate FunctionsLesson 854 — Filter's Predicate Function
- Predictability
- Some environments may implement it differently
- Lesson 719 — Why __proto__ Is Deprecated in Modern CodeLesson 906 — Why Immutability Matters in JavaScriptLesson 1172 — The Problem Synchronous Code SolvesLesson 1745 — Why Pure Functions MatterLesson 2694 — What is Mocking and Why Mock?
- Predictable
- No surprises about when values exist
- Lesson 99 — Best Practices: Declare Before UseLesson 1742 — Deterministic Output: Same Inputs, Same Results
- Predictable execution order
- You always know the exact sequence of operations within synchronous code
- Lesson 1187 — Single-Threaded Execution
- Predictable Memory
- A `Float64Array` with 1000 elements always uses exactly 8,000 bytes.
- Lesson 2330 — Performance Characteristics
- prefer `!==`
- in almost all cases.
- Lesson 62 — Inequality Operators: != and !==Lesson 205 — Inequality: != vs !==
- Prefer immutability when
- Lesson 837 — When to Prefer Non-Mutating Methods
- Prefer named exports when
- Lesson 1417 — When to Use Named vs Default
- preserve
- the `this` from the surrounding code.
- Lesson 396 — Arrow Functions and 'this' BindingLesson 1958 — The &&= (Logical AND Assignment) Operator
- Preserve DRY principles
- (Don't Repeat Yourself) when the same pattern appears everywhere
- Lesson 2067 — What Decorators Are and Why They Exist
- Preserving context
- You need to lock in `this` before the function gets called in an unpredictable context
- Lesson 557 — Why Manual 'this' Binding Exists
- Prettier
- Automatically formats your code to look clean and consistent
- Lesson 29 — Setting Up a Local Development EnvironmentLesson 2576 — What Prettier Is and Isn'tLesson 2604 — Consistent Style vs. Personal Preference
- primitive values
- (numbers, strings, booleans), each array position gets its own independent copy.
- Lesson 893 — Fill Gotcha: Reference vs Primitive ValuesLesson 2004 — What structuredClone Can and Cannot Clone
- primitives
- and **objects**.
- Lesson 31 — The Seven Primitive TypesLesson 1753 — Immutable Operations on PrimitivesLesson 2151 — What Data Can Be Transferred?Lesson 2407 — Handling Primitive vs Reference Types
- Private fields
- (modern): Using `#` syntax in classes (ES2022)
- Lesson 1827 — What Encapsulation Means in JavaScript
- private methods
- keep internal helper logic hidden from code outside the class.
- Lesson 791 — Private MethodsLesson 1987 — Private Methods
- Private Methods Pattern
- uses closures to create helper functions that exist only within the factory function's scope.
- Lesson 514 — Private Methods Pattern
- Private packages
- Your company's internal code shouldn't be public
- Lesson 2496 — The NPM Registry and Alternatives
- private scope
- and providing explicit `import` and `export` syntax to share code between files.
- Lesson 1396 — What Are ES Modules?Lesson 1397 — The Module Scope
- Process management
- – running scripts, handling command-line input
- Lesson 18 — Node.js Runtime: Server-Side JavaScriptLesson 1501 — Process.pid and Process.ppid
- Process microtasks
- Run *all* microtasks before moving to the next task
- Lesson 1219 — Tracing Execution with a Diagram
- Production mode
- Vite switches gears completely and uses Rollup under the hood to create optimized, bundled assets with code splitting, tree shaking, and minification.
- Lesson 2459 — Vite: Development server meets bundler
- Production monitoring
- Log unhandled rejections to error tracking services
- Lesson 1506 — Process Event: 'unhandledRejection'
- Production optimization
- They minify, compress, and optimize your final output
- Lesson 2453 — What is a bundler and why do we need one?
- Production with forgotten logs
- Users with DevTools open experience memory bloat
- Lesson 1878 — Console.log in Production Code
- Professional polish
- You're building a consumer-facing product where natural language matters
- Lesson 2246 — When to Use ListFormat and DisplayNames
- Profile first
- using DevTools Memory Profiler or Performance Monitor
- Lesson 1905 — The 80/20 Rule in Performance
- Profiling
- means measuring where your code actually spends its time, so you know what's worth fixing.
- Lesson 378 — Profiling Before Optimizing Loops
- Programmatic clearing
- Useful when you want to isolate specific output, create visual boundaries between operations, or automatically reset logs in long-running processes
- Lesson 1489 — Console.clear and Output Management
- Progress tracking
- Read chunks as they arrive and update a progress bar
- Lesson 2291 — Accessing the ReadableStream
- Progressive enhancement
- means building your application so it *works* without workers but *benefits* from them when available.
- Lesson 2197 — Progressive Enhancement with Workers
- Project config files
- – Shared files committed to Git (`.
- Lesson 2588 — Editor Settings vs Project Config
- Project generators
- Lesson 2509 — Running One-Off Commands with NPX
- Project Type and Size
- Small scripts or libraries might thrive with Node's built-in runner for its zero-dependency simplicity.
- Lesson 2661 — Choosing the Right Test Runner
- Projects maintaining backward compatibility
- with Node.
- Lesson 1449 — When to Use CommonJS in Modern Projects
- Promise
- that resolves to `{value, done}`:
- Lesson 1020 — Symbol.asyncIterator for Async IterationLesson 1263 — What is a Promise?Lesson 1420 — What is Dynamic Import?Lesson 1421 — Basic Dynamic Import SyntaxLesson 2021 — The Async Iterator ProtocolLesson 2022 — Creating a Custom Async IterableLesson 2023 — Async Iterator next() MethodLesson 2044 — The next() Method with Async Generators (+7 more)
- Promise chains
- make the asynchronous nature visible at every step.
- Lesson 1338 — Async Functions vs Promise Chains
- Promise Constructor Anti-Pattern
- happens when you wrap an operation that *already returns a promise* inside a new `Promise()` constructor.
- Lesson 1273 — Promise Constructor Anti-Pattern
- Promise.all
- Use when you need *every* promise to succeed.
- Lesson 1316 — Comparing any, race, all, and allSettled
- Promise.allSettled
- Use when you need to *try everything* and see all outcomes, regardless of success or failure.
- Lesson 1316 — Comparing any, race, all, and allSettled
- Promise.any
- Use when you need *at least one* success, and you don't care which one.
- Lesson 1316 — Comparing any, race, all, and allSettled
- Promise.race
- Use when you only care about the *first* result, success or failure.
- Lesson 1316 — Comparing any, race, all, and allSettled
- Promises-based
- Returns promises for modern async/await patterns
- Lesson 1517 — FS Module Overview: Sync vs Async vs Promises API
- Promisifying
- means wrapping these callback-based functions in a Promise, transforming them into cleaner, chainable code that works beautifully with `async/await`.
- Lesson 1260 — Promisifying Callback-Based APIs
- propagates
- through all subsequent operations:
- Lesson 242 — NaN in Arithmetic OperationsLesson 1162 — Error Propagation in Synchronous Code
- Proper `this` binding
- Automatic context preservation
- Lesson 2392 — Using Lodash or Underscore Implementations
- properties
- on the `Math` object with full precision, so you don't have to memorize or estimate them.
- Lesson 144 — Math Constants: PI, E, and OthersLesson 789 — Static vs Instance: When to Use EachLesson 1937 — What Is Optional Chaining?
- property
- , not a method—no parentheses needed like `size()`.
- Lesson 1038 — Map Size PropertyLesson 1048 — Set Size and Clearing
- Property descriptors
- getters, setters, configurability
- Lesson 2004 — What structuredClone Can and Cannot Clone
- property names
- (keys).
- Lesson 355 — For...in with ObjectsLesson 359 — For...of vs For...in: Key Differences
- Pros
- Start running immediately
- Lesson 14 — Interpretation vs CompilationLesson 1228 — Anonymous vs Named CallbacksLesson 2477 — Inline vs External Source Maps
- prototype
- .
- Lesson 636 — Object.getPrototypeOf()Lesson 697 — What is a Prototype?Lesson 698 — The Prototype Chain Concept
- Prototype pollution
- Objects inherit properties from `Object.
- Lesson 1065 — Object vs Map: When Objects Fall Short
- Prototype pollution risks
- Objects inherit properties from `Object.
- Lesson 1031 — What is a Map and Why Use It?
- Prototypes
- The cloned object will have `Object.
- Lesson 694 — structuredClone LimitationsLesson 2004 — What structuredClone Can and Cannot Clone
- Public APIs or libraries
- When your code will be used by others who might accidentally (or intentionally) access internal state
- Lesson 1991 — When to Use Private Fields
- Pull
- You get a notification saying "new article available" — you visit the website to read it
- Lesson 2111 — Push vs Pull Models
- Pull advantages
- Lesson 2111 — Push vs Pull Models
- Pull Model
- The subject only sends a notification (or a reference to itself).
- Lesson 2111 — Push vs Pull Models
- Pure
- (no mutation):
- Lesson 1744 — Pure vs Impure: Comparison ExamplesLesson 1749 — Purity and ClosuresLesson 2372 — What Is Memoization?Lesson 2379 — Memoization and Recursion
- pure function
- is like a reliable vending machine: you put in the same coins, you always get the same snack, and the machine doesn't randomly redecorate your office while you wait.
- Lesson 1741 — What Makes a Function PureLesson 2381 — Memoization Gotchas with Impure Functions
- Pure functions
- (same input always produces same output)
- Lesson 2378 — When Memoization Helps Performance
- Push advantages
- Lesson 2111 — Push vs Pull Models
- Push Model
- The subject sends complete data to observers when notifying them.
- Lesson 2111 — Push vs Pull Models
- PUT
- – Replace existing data completely (like rewriting an entire book)
- Lesson 2268 — Request Methods and HTTP Verbs
- Put them in arrays
- Lesson 385 — Functions as Values
Q
- Queues a microtask
- to resume the function after the awaited promise settles
- Lesson 1351 — The Implicit Microtask Queue
- Quoted property names
- can contain almost anything: spaces, hyphens, special characters, or reserved words:
- Lesson 590 — Property Names and Valid Keys
R
- race conditions
- if not carefully synchronized.
- Lesson 2180 — What is SharedArrayBuffer?Lesson 2183 — Race Conditions Without Atomics
- radix
- (optional, but recommended) specifies the number system — `10` for decimal, `16` for hexadecimal, `2` for binary:
- Lesson 104 — Number.parseInt and Number.parseFloatLesson 1791 — The parseInt Gotcha
- Random access needed
- Arrays let you jump to any index; lazy sequences only move forward
- Lesson 1127 — When to Choose Lazy vs. Eager
- Randomness
- Lesson 1743 — Side Effects Defined
- Rapid prototyping
- When experimenting, JSDoc won't slow you down with compiler errors blocking execution—you get editor hints without build friction.
- Lesson 2643 — Assessing Project Complexity and Team Size
- Rarely
- V8's optimizations are sophisticated and context-aware.
- Lesson 376 — Loop Unrolling and When V8 Does ItLesson 646 — Iteration Order and When It MattersLesson 2510 — NPX vs Global Install
- Raw bytes
- Stores data in its binary form (0-255 per byte)
- Lesson 1582 — What is a Buffer?Lesson 2343 — Why TextEncoder and TextDecoder Exist
- Re-declaration allowed
- You can accidentally declare the same variable twice with `var`, and JavaScript won't complain — it just overwrites silently.
- Lesson 66 — Declaring Variables with var
- Re-exporting
- means importing something from one module and immediately exporting it from your current module.
- Lesson 1414 — Export Lists and Re-exporting
- Re-throw intermediate errors
- that you can't fully resolve:
- Lesson 1329 — Error Handling Best Practices in Chains
- reachability
- if there's no way to access a piece of data from your currently running code — no variable references it, no object property points to it — then it's considered "unreachable" and eligible for garbage collection.
- Lesson 1860 — What is Garbage Collection?Lesson 1861 — Reachability: The Core ConceptLesson 1869 — What Developers Can't Control
- React
- Forgetting cleanup in `useEffect` hooks or not canceling subscriptions in class component `componentWillUnmount`.
- Lesson 1881 — Memory Leak Patterns in Frameworks
- Reactive patterns
- (observables, streams) focus on data flow over time.
- Lesson 2434 — FSMs vs Other Patterns
- read-only
- you can't change them (which makes sense for mathematical truths!
- Lesson 144 — Math Constants: PI, E, and OthersLesson 2367 — The File Interface
- readability
- especially when initializing values.
- Lesson 71 — Multiple Declarations in One StatementLesson 371 — Why Loop Performance MattersLesson 387 — Function Constructor (Rarely Used)Lesson 599 — Object Literals vs. new Object()Lesson 1254 — Naming Callbacks for ClarityLesson 1257 — Using Control Flow LibrariesLesson 1295 — Chaining vs NestingLesson 1307 — Parallel vs All: Performance Considerations (+2 more)
- Readability first
- Business logic, configuration, one-time setup code, anything that changes frequently based on requirements.
- Lesson 1933 — Trade-offs: Speed vs Readability vs Maintainability
- Readable
- Variables are defined where someone naturally looks first
- Lesson 99 — Best Practices: Declare Before UseLesson 799 — Creating Arrays with Array LiteralsLesson 1548 — What Are Streams?Lesson 1550 — The Four Stream Types
- Readable code
- – unminified, with original variable names preserved
- Lesson 2449 — Development vs Production Builds
- Readable side
- `'data'`, `'end'`, `'readable'` events, plus `read()` and `pipe()` methods
- Lesson 1561 — What Are Duplex Streams?
- ReadableStream
- , available in both Node.
- Lesson 2027 — Built-in Async IterablesLesson 2291 — Accessing the ReadableStream
- ReadableStreams
- (both Node.
- Lesson 2027 — Built-in Async IterablesLesson 2288 — Body Used and ReadableStream
- Reading a prototype
- Lesson 719 — Why __proto__ Is Deprecated in Modern Code
- Reading strategy
- Lesson 1243 — Reading Deeply Nested Callbacks
- Real user data
- (from Performance Observer API or RUM metrics you've learned)
- Lesson 1932 — Setting Performance Budgets
- Real-time coordination
- Threads need instant visibility of changes
- Lesson 2179 — PostMessage vs Shared Memory: When to Use Each
- Real-time Systems
- WebSocket messages, chat applications, or live data feeds
- Lesson 2424 — Event Emitter Use Cases and Alternatives
- reassign
- its value at any time using the same syntax you used to create it.
- Lesson 604 — Updating Property ValuesLesson 933 — Destructuring Without DeclarationLesson 1448 — Module.exports vs Exports Pitfall
- Recommended fixes
- (often just updating to a newer version)
- Lesson 2507 — Audit and Security in Dependencies
- Recover from it
- Handle the error gracefully and provide a fallback
- Lesson 1235 — Handling Errors in Error-First Callbacks
- Recurse
- The bundler then parses *those* files, finding their imports, resolving them, and so on.
- Lesson 2446 — Dependency Resolution
- Recursive custom implementations
- are the *slowest* but most flexible.
- Lesson 2402 — Performance Considerations
- Recursive functions
- with overlapping subproblems (like Fibonacci calculations)
- Lesson 2378 — When Memoization Helps Performance
- ReDoS
- (Regular Expression Denial of Service) is an attack that exploits how regex engines handle backtracking.
- Lesson 1740 — ReDoS and Security
- Reduced readability
- Complex, clever code that saves microseconds but takes minutes to understand
- Lesson 1928 — Premature Optimization Is the Root of All Evil
- Refactoring freedom
- You can change `_password` internally without worrying about breaking external code
- Lesson 1829 — Convention-Based Privacy with Underscore Prefix
- Refactoring support
- Rename symbols safely across your codebase
- Lesson 2648 — Editor Experience with JSDoc
- reference
- think of it as an arrow pointing to where the object lives in memory.
- Lesson 45 — Objects Store References, Not ValuesLesson 49 — Functions Receive References to ObjectsLesson 50 — Arrays Are Objects TooLesson 506 — Closures Don't Copy the Scope
- reference types
- .
- Lesson 50 — Arrays Are Objects TooLesson 211 — Object and Array ComparisonLesson 689 — Why Object Cloning MattersLesson 2407 — Handling Primitive vs Reference Types
- Refinements
- let you add custom validation logic after the basic type checks pass.
- Lesson 2638 — Refinements and Transformations
- Regex pattern matching
- tests whether strings conform to patterns:
- Lesson 2677 — String Matching Assertions
- RegExp
- `/pattern/gi`
- Lesson 2151 — What Data Can Be Transferred?Lesson 2412 — Deep Equality for Dates, RegExp, and Other Built-ins
- RegExp, Map, Set
- become empty objects or are lost
- Lesson 2005 — structuredClone vs JSON Parse/Stringify
- Registry mirrors
- Faster downloads from geographically closer servers (common in China with `cnpm`)
- Lesson 2496 — The NPM Registry and Alternatives
- regular functions
- .
- Lesson 545 — Preview: Arrow Functions Break the RulesLesson 733 — Constructor Functions vs Regular Functions
- Rejected
- The operation failed with an error
- Lesson 1263 — What is a Promise?Lesson 1264 — Promise StatesLesson 1270 — Synchronous Errors in the Executor
- Relative time formatting
- means displaying time differences in natural, conversational language relative to now—like "5 minutes ago," "tomorrow," or "in 3 weeks.
- Lesson 1654 — Intl.RelativeTimeFormat Overview
- Remaining arguments
- The *values* of each `${}` expression, in order
- Lesson 152 — Tagged Template LiteralsLesson 558 — The call() Method
- remember
- those variables even after the outer function has finished executing.
- Lesson 88 — Scope and Closures PreviewLesson 2691 — Testing Callback-Based APIs
- Remember the rule
- When the stack empties, drain ALL microtasks before taking ONE task
- Lesson 1220 — Mental Model for Debugging Async
- Remove a package
- Lesson 2529 — Installing and Using Yarn
- Remove module boundaries
- through tree-shaking and scope hoisting
- Lesson 1437 — Cache Behavior in Development vs Production
- Removing elements immutably
- Lesson 912 — Replacing .splice() with Spread and Slice
- Removing properties
- Lesson 932 — Destructuring with Rest Properties
- Renaming exports
- Changing `export function oldName()` to `export function newName()` forces users to update all references.
- Lesson 2519 — MAJOR: Breaking Changes
- Render
- update the screen if needed (browser decides when)
- Lesson 1195 — The Event Loop Tick CycleLesson 1214 — Order of Execution in the Loop
- Rendering functions
- called for every pixel or DOM element
- Lesson 1903 — When Micro-Optimizations Do Matter
- Replace Incompatible Packages
- Lesson 2506 — Dealing with Peer Dependency Conflicts
- Replacing elements immutably
- Lesson 912 — Replacing .splice() with Spread and Slice
- Reports violations
- when patterns match known problems or style preferences
- Lesson 2602 — What Linters Actually Do
- reproducibility
- matters more than convenience.
- Lesson 2494 — npm ci for Reproducible InstallsLesson 2507 — Audit and Security in Dependencies
- required
- `() => .
- Lesson 395 — Parentheses in Arrow Function ParametersLesson 601 — Dot Notation vs Bracket Notation
- Requires `package-lock.json`
- to exist (fails without it)
- Lesson 2494 — npm ci for Reproducible Installs
- Reserved keywords
- `"if"`, `"class"`, `"return"` (when quoted)
- Lesson 590 — Property Names and Valid Keys
- Resetting a portion
- Lesson 890 — The Array.prototype.fill() Method
- Resolve Paths
- For each dependency, it determines the actual file path.
- Lesson 2446 — Dependency Resolution
- resolved promise
- first.
- Lesson 1289 — Returning Values from .then()Lesson 1340 — Returning Non-Promise Values
- Response object
- a wrapper that contains everything about the HTTP response: status codes, headers, and methods to access the body content.
- Lesson 2256 — The Response Object
- Response streams
- let you access data as it arrives, chunk by chunk, rather than blocking until everything downloads.
- Lesson 2290 — Understanding Response Streams
- Rest must be last
- The rest element must always be the final variable in your destructuring pattern.
- Lesson 983 — Rest in Array Destructuring
- rest operator
- (`.
- Lesson 920 — Destructuring the Rest with ... OperatorLesson 998 — Removing Properties Immutably
- rest parameter
- to collect all remaining arguments into a true array.
- Lesson 412 — Rest Parameters: Collecting Remaining ArgumentsLesson 980 — Rest Parameters Syntax
- Restart the ESLint server
- through your editor's command palette ("ESLint: Restart ESLint Server").
- Lesson 2592 — Troubleshooting Editor Integration Issues
- Resume
- from where they paused when asked
- Lesson 1096 — What Are Generator Functions?Lesson 1339 — Async Function Execution Model
- Rethrow it
- Pass the error up to a higher-level handler
- Lesson 1235 — Handling Errors in Error-First Callbacks
- Retry values
- Return a signal that lets the chain try an alternative approach
- Lesson 1281 — Recovering from Errors with .catch()
- Return address
- Where to resume execution after the function completes
- Lesson 1183 — Stack Frames and Function Context
- Return an error value
- return a special value (like `null`, `undefined`, or an error object) that the caller must check
- Lesson 1149 — Throwing vs Returning Error Values
- Return early
- when you encounter an error — this prevents wrapping the success path in another `else` block
- Lesson 1255 — Limiting Nesting Depth
- return value
- .
- Lesson 380 — Calling Functions and Return ValuesLesson 822 — The Return Values of Mutating Methods
- Return values
- Handled differently between the two systems
- Lesson 2102 — Legacy Class and Method DecoratorsLesson 2623 — How @ts-check Uses Type Inference
- Returning a function
- Lesson 439 — What Makes a Function Higher-Order
- Returning an object
- The returned object becomes the result of the `new` expression, replacing the instance.
- Lesson 766 — Return Values from Constructors
- Returns
- the new object (unless you explicitly return something else)
- Lesson 552 — The 'new' Keyword and Constructor CallsLesson 1770 — Currying with Arrow FunctionsLesson 2186 — Atomics.compareExchange for Lock-Free Updates
- Returns an iterator
- You can loop over it with `for.
- Lesson 162 — matchAll(): Iterating Over All Matches
- Returns the object automatically
- – The newly created object is returned (you don't write `return`)
- Lesson 750 — The new Keyword with Classes
- Reusability
- Use the same `.
- Lesson 23 — External JavaScript FilesLesson 510 — Counter FactoriesLesson 669 — Basic Factory Function PatternLesson 1254 — Naming Callbacks for ClarityLesson 1257 — Using Control Flow LibrariesLesson 1396 — What Are ES Modules?Lesson 1766 — Why Curry? Reusability and Composition
- Reusing results
- Arrays can be iterated multiple times; generators are one-time-use
- Lesson 1127 — When to Choose Lazy vs. Eager
- Revealing Module Pattern
- flips the script: you define *all* your functions and variables privately within the module, then at the very end you return an object that "reveals" only the parts you want to make public.
- Lesson 1842 — The Revealing Module Pattern
- Revenue-critical flows
- Sign-up, checkout, payment processing
- Lesson 1934 — Hot Paths and Critical User Journeys
- Reversible
- You can always reconstruct the Date using `new Date(isoString)`.
- Lesson 1630 — toISOString for Standard Format Output
- Review hot paths together
- During sprint planning or architecture reviews, explicitly identify which code paths are performance-critical (your 20% that handles 80% of load).
- Lesson 1936 — Building a Performance Culture Without Obsession
- Right approach
- Lesson 720 — Common Mistakes: Confusing the Two
- right-to-left
- .
- Lesson 271 — Associativity: Left-to-Right vs Right-to-LeftLesson 478 — Manual Composition with Nested CallsLesson 870 — Practical ReduceRight: Composing FunctionsLesson 1779 — Building a Compose Helper
- Roll your own
- custom implementation (like you've been practicing)
- Lesson 2423 — Node.js EventEmitter vs Custom Implementations
- Rollup Plugin Visualizer
- generates similar charts for Rollup builds
- Lesson 2473 — Verifying Tree Shaking Results
- Roots include
- Lesson 1861 — Reachability: The Core Concept
- Round appropriately
- Lesson 2227 — Common Patterns: Calculating Time Differences
- Rule conflicts
- ESLint and Prettier can clash; plugins may contradict each other
- Lesson 2606 — The Cost of Configuration
- Rule of thumb
- Tasks taking more than **50ms** risk causing dropped frames (at 60 FPS, each frame has ~16ms).
- Lesson 2192 — Measuring Task Duration with Performance APIs
- Run for files
- Lesson 2581 — Format-on-Save in Your Editor
- Run the current script
- (or task) from the task queue to completion
- Lesson 1214 — Order of Execution in the Loop
- Runs the constructor method
- – Your `constructor()` function executes, with `this` bound to that new object
- Lesson 750 — The new Keyword with Classes
- runtime
- comes in.
- Lesson 16 — What is a Runtime?Lesson 18 — Node.js Runtime: Server-Side JavaScriptLesson 2650 — The Pragmatic Middle Ground
- Runtime Budgets
- "Page interactions must respond within 100ms"
- Lesson 1932 — Setting Performance Budgets
- Russian
- changes forms based on the last digit of the number
- Lesson 2228 — Understanding Pluralization Across Languages
- Rust
- , offering blazing-fast transpilation and minification that's 20-70x faster than Babel.
- Lesson 2462 — SWC and modern bundler foundations
S
- Safari
- uses JavaScriptCore
- Lesson 9 — What is a JavaScript Engine?Lesson 1963 — Browser and Node Support Considerations
- Safe copying
- Data is cloned by default, preventing shared-state bugs
- Lesson 2168 — PostMessage Overview: Sending Data Between Contexts
- Safety matters most
- No risk of race conditions since data is copied
- Lesson 2179 — PostMessage vs Shared Memory: When to Use Each
- Same-line suppression
- Lesson 2591 — Disabling Rules Inline with Comments
- Same-origin policy applies
- Scripts must be from the same origin or served with proper CORS headers
- Lesson 2155 — Importing Scripts in Workers
- SameValueZero
- for this comparison.
- Lesson 1040 — Key Equality and ReferenceLesson 1050 — Set Value Uniqueness
- Scale
- You're displaying many region/language/currency names and maintaining translations manually would be error-prone
- Lesson 2246 — When to Use ListFormat and DisplayNames
- Scientific computing
- involving very large integers (like calculating factorials of big numbers or working with astronomical distances in millimeters) requires exact integer arithmetic without any approximation.
- Lesson 126 — When to Use BigInt InsteadLesson 1972 — When to Use BigInt vs Number
- scientific notation
- (also called **e-notation**) to express these values more clearly.
- Lesson 102 — Scientific Notation (e-notation)Lesson 2205 — Grouping and Notation Options
- Scientific simulations
- Parallel computation on large matrices or data grids
- Lesson 2189 — When SharedArrayBuffer Makes Sense
- Scope
- is the set of rules that determines where in your code a variable can be accessed.
- Lesson 77 — What is Scope?Lesson 533 — Debugging Closure Memory Issues
- Scrimba
- offer interactive video courses with browser-focused projects
- Lesson 1495 — Where to Learn More About Web Development
- Scroll handlers
- Update a "scroll progress" indicator every 100ms, not every pixel
- Lesson 2387 — What Throttle SolvesLesson 2390 — Debounce vs Throttle: When to Use Which
- Scrolling
- Scroll events fire continuously as the user moves the page.
- Lesson 2383 — What Debounce Solves
- Search autocomplete
- Only fetch results after the user pauses typing.
- Lesson 2383 — What Debounce Solves
- Search for "Detached"
- in the constructor filter to see all detached nodes at once
- Lesson 1891 — Identifying Detached DOM Nodes
- Search input
- Wait until the user stops typing before sending an API request
- Lesson 2390 — Debounce vs Throttle: When to Use Which
- Search-as-you-type
- Each keystroke fires a request, but only the latest matters
- Lesson 2300 — Why AbortController Exists
- Searching
- Exit as soon as you find what you need
- Lesson 370 — Loop control best practices and readability
- Second iteration
- `sum` is `10`, `price` is `25` → returns `35`
- Lesson 457 — Summing Numbers with ReduceLesson 459 — Flattening Arrays with Reduce
- second parameter
- that lets you define properties *with full control over their descriptors* right when you create the object.
- Lesson 725 — The propertiesObject ParameterLesson 1236 — Success Path: Using the ResultLesson 2339 — Endianness in DataView
- Seconds
- Get that remainder, divide by `1000`
- Lesson 1629 — Converting Milliseconds to Human-Readable DurationsLesson 2443 — The Module Problem in Browsers
- Security
- (sensitive dev-only values never ship to clients)
- Lesson 2451 — Environment Variables and Build-Time ConstantsLesson 2499 — The Purpose of Lockfiles
- Security and Integrity
- Lesson 1983 — Why Private Fields?
- Security concerns
- npm lacked robust integrity checking, making it harder to verify that downloaded packages hadn't been tampered with during transit.
- Lesson 2527 — Why Alternative Package Managers Exist
- Security first
- Your code can't access files, networks, or environment variables unless you explicitly allow it
- Lesson 19 — Deno and Bun: Alternative Runtimes
- Security risks
- Creating functions from strings is similar to `eval()` — it can execute arbitrary code, making your application vulnerable if the strings come from user input.
- Lesson 387 — Function Constructor (Rarely Used)Lesson 1465 — Implicit Global Access
- Security scanning
- Some organizations route through registries that scan for vulnerabilities
- Lesson 2496 — The NPM Registry and Alternatives
- Security-sensitive data
- Authentication tokens, encryption keys, or internal state that must never leak
- Lesson 1991 — When to Use Private Fields
- Self-reference
- The function can reference itself by name (useful for recursion, though you haven't learned that pattern yet):
- Lesson 383 — Named Function Expressions
- semantic versioning
- (semver): `MAJOR.
- Lesson 2484 — Installing Node.js and NPMLesson 2537 — The Name and Version Fields
- Send messages
- with format like `{ id, type, data }`
- Lesson 2176 — Request-Response Patterns with PostMessage
- Separating test runs
- Lesson 1489 — Console.clear and Output Management
- Separation of concerns
- The algorithm (process and sort) is separate from the policy (how to sort)
- Lesson 437 — Functions as Configuration
- sequentially
- by creating promises inside the `Promise.
- Lesson 1310 — Common Pitfalls: Sequential vs ConcurrentLesson 1363 — Understanding Sequential Await ExecutionLesson 2551 — Running Scripts Across Workspaces
- Servers (Node.js)
- JavaScript powers the backend of countless websites and applications.
- Lesson 5 — JavaScript Beyond the Browser
- Set
- is a built-in JavaScript collection that stores **unique values**.
- Lesson 1044 — What is a Set?Lesson 1054 — When to Use Sets vs ArraysLesson 1897 — Choosing the Right Data Structure
- Sets
- and **Maps**—two iterable data structures.
- Lesson 353 — For...of with Sets and MapsLesson 841 — Array.from with IterablesLesson 965 — Spreading Iterables into Arrays
- setter
- runs when you assign a new value to it.
- Lesson 658 — What Are Getters and Setters?Lesson 660 — Defining Setters with the 'set' Keyword
- Setting a prototype
- Lesson 719 — Why __proto__ Is Deprecated in Modern Code
- Setup complexity
- You must mock every async operation in the chain.
- Lesson 1251 — Testing Callback Hell Code
- Setup time
- Complex configurations take hours or days to design and test
- Lesson 2606 — The Cost of Configuration
- shallow
- nested objects are still referenced, not copied
- Lesson 691 — Shallow Clone with Object.assignLesson 1262 — Balancing Pragmatism and RefactoringLesson 1755 — Copying Objects with Spread and Object.assign
- shallow copies
- .
- Lesson 913 — Deep Cloning Nested ArraysLesson 1000 — When Not to Use SpreadLesson 2396 — Shallow vs Deep Copy
- shallow copy
- of a portion of an array.
- Lesson 826 — slice() for Extracting Array PortionsLesson 836 — Shallow vs Deep Copying with Non- Mutating MethodsLesson 966 — Shallow Copy BehaviorLesson 975 — Spread with Nested ObjectsLesson 984 — Rest in Object DestructuringLesson 992 — Cloning Arrays and Objects ShallowlyLesson 2396 — Shallow vs Deep Copy
- Share context, not shame
- When performance issues arise, discuss them as learning opportunities.
- Lesson 1936 — Building a Performance Culture Without Obsession
- shared
- behavior (methods), not unique data.
- Lesson 748 — Instance Properties: Where They LiveLesson 1432 — Shared Module State
- Shared prototypes
- let all instances reference the *same* function:
- Lesson 522 — Avoiding Closure Overhead
- SharedArrayBuffer
- Multiple threads access the same memory directly
- Lesson 2179 — PostMessage vs Shared Memory: When to Use Each
- Shopping cart items
- Array (ordered, duplicates possible)
- Lesson 1072 — Decision Framework: Choosing the Right Collection
- Short
- Good for UI labels where space is limited but readability matters
- Lesson 1658 — Style Options: Long, Short, and NarrowLesson 2239 — ListFormat Styles: Long, Short, and Narrow
- short-circuit evaluation
- .
- Lesson 218 — Short-Circuit Evaluation with ||Lesson 468 — Short-Circuit Behavior in Every
- short-circuiting
- .
- Lesson 377 — Early Exit and Short-CircuitingLesson 1328 — Promise.all and Error Short-CircuitingLesson 1898 — Early Returns and Short-Circuiting
- short-circuits
- it stops evaluating as soon as the result is determined.
- Lesson 317 — Combining Logical Operators in ConditionsLesson 469 — The Some Method: Testing Any ElementLesson 473 — Find vs Filter for Single Items
- side effect
- occurs when a function does something other than just compute and return a value.
- Lesson 1743 — Side Effects DefinedLesson 2120 — Effects and Side EffectsLesson 2469 — Side Effects and 'sideEffects' Field
- side effects
- like logging or DOM updates.
- Lesson 444 — Map vs ForEachLesson 660 — Defining Setters with the 'set' KeywordLesson 846 — The forEach MethodLesson 2080 — Accessor Decorators (Getters and Setters)Lesson 2429 — Adding Side Effects and Actions
- Side effects must sequence
- Creating a user account before sending a welcome email
- Lesson 1368 — Choosing Between Sequential and Parallel
- Side-effect-free code
- Bundlers must be confident that removing code won't break anything
- Lesson 2447 — Dead Code Elimination
- signal
- is a reactive container that holds a single value and automatically notifies any dependent code when that value changes.
- Lesson 2117 — What Are Signals?Lesson 2118 — Signal Creation and Reading
- Signal sent
- This signals the readable stream (or your code) to pause
- Lesson 1576 — How Backpressure Works Internally
- signals
- as an elegant solution.
- Lesson 2125 — Signals in Modern FrameworksLesson 2126 — Implementing a Minimal Signal SystemLesson 2144 — Managing Asynchronous Dependencies
- Signals are pull-based
- they hold a current value that consumers read on demand.
- Lesson 2124 — Signals vs Observables
- Signed
- means it can represent both positive and negative numbers
- Lesson 254 — The Binary Number System Refresher
- Silent bugs
- Typos create globals instead of errors
- Lesson 1465 — Implicit Global AccessLesson 1466 — Global Namespace Pollution
- Silent failures
- No error occurs—your code just behaves strangely
- Lesson 52 — Pitfall: Unintended Shared State
- Simple comparisons in conditions
- `x > 5 && y < 10`
- Lesson 273 — When to Rely on Precedence vs Parentheses
- simple data structures
- .
- Lesson 1069 — When Objects Still Win: JSON and Plain DataLesson 2397 — JSON.parse(JSON.stringify()) Method
- Simple data transformations
- Lesson 1763 — Performance Considerations with Immutability
- Simple event handlers
- work fine with callbacks:
- Lesson 2145 — When Simple Callbacks or Promises Are Better
- Simple needs
- You only compare plain objects with known structure
- Lesson 2413 — When to Use Libraries vs Rolling Your Own
- Simple one-time operations
- Fetching data once?
- Lesson 2139 — Identifying Problems Suited for Reactive Patterns
- Simple splitting
- Splitting on a single character?
- Lesson 1676 — Common Mistakes and When Regex Is Overkill
- Simple substring checks
- If you're just checking whether a string contains "hello", use `str.
- Lesson 1676 — Common Mistakes and When Regex Is Overkill
- Simple to understand
- it's just a function returning an object literal
- Lesson 668 — What Are Factory Functions?
- Simpler is often better
- Lesson 957 — When Parameter Destructuring Hurts Readability
- Simpler mental model
- No synchronization primitives needed
- Lesson 2179 — PostMessage vs Shared Memory: When to Use Each
- Simplicity
- You don't need complex locking mechanisms to protect shared data
- Lesson 1187 — Single-Threaded ExecutionLesson 1615 — Date.now for Current Timestamp
- Simplicity matters
- Arrays are familiar, easier to debug, and work with existing array methods
- Lesson 1127 — When to Choose Lazy vs. Eager
- Single async operation
- Plain `await` is simpler for one-off promises
- Lesson 2037 — When to Prefer For-Await-Of
- Single asynchronous operations
- are best handled with Promises:
- Lesson 2145 — When Simple Callbacks or Promises Are Better
- Single expression
- Skip the braces and `return` (implicit return)
- Lesson 392 — Arrow Function Syntax Basics
- Single Reduce
- processes the array only once and doesn't create intermediate arrays, which *can* be faster with large datasets.
- Lesson 461 — Chaining Operations vs Single Reduce
- single responsibility
- and a descriptive name.
- Lesson 1256 — Splitting Operations into Separate FunctionsLesson 1847 — The Decorator Pattern
- Single state
- The system is in exactly one state at a time
- Lesson 2425 — What Is a Finite-State Machine?
- single thread
- , meaning it can execute only one piece of code at any given moment.
- Lesson 1175 — The Single-Threaded Nature of JavaScriptLesson 1179 — The Misconception of 'Parallel' Execution
- Single-line suppression
- Lesson 2591 — Disabling Rules Inline with Comments
- single-threaded
- , meaning it has one main execution thread.
- Lesson 1170 — What 'Synchronous' Means in JavaScriptLesson 1217 — Blocking the Event LoopLesson 1222 — Why Callbacks Exist
- Single-use iterables
- The iterator exhausts after one pass, and subsequent iterations yield nothing
- Lesson 2014 — Reusable vs Single-Use Iterators
- Singleton
- Use when you genuinely need exactly one instance (like a global config manager or logging service).
- Lesson 1850 — When to Use Each Pattern
- Size constraints
- Your bundle can't afford 20KB for one function
- Lesson 2413 — When to Use Libraries vs Rolling Your Own
- Skip Base64 when
- Lesson 2360 — Base64 Overhead and When to Avoid It
- Skip it
- for internal tools, single-locale apps, or when you're just joining 2-3 fixed English words with "and.
- Lesson 2246 — When to Use ListFormat and DisplayNames
- Skip well-known symbols when
- Lesson 1022 — When to Use Well-Known Symbols
- skips
- all subsequent `.
- Lesson 1163 — Error Propagation in PromisesLesson 1280 — Where .catch() Catches Errors
- Skips unnecessary work
- if a computed's value didn't actually change
- Lesson 2122 — Signal Graphs and Propagation
- Small codebases
- (under ~5,000 lines): Adding types with JSDoc comments keeps you in standard JavaScript.
- Lesson 2643 — Assessing Project Complexity and Team Size
- Small teams
- (1–3 developers): Onboarding is faster when collaborators don't need to learn TypeScript syntax, tooling quirks, or debugging source maps.
- Lesson 2643 — Assessing Project Complexity and Team Size
- Small, Coordinated Teams
- When your team is small enough that everyone understands most of the codebase, a monorepo reduces the overhead of managing separate repositories.
- Lesson 2552 — When a Monorepo Makes Sense
- Smaller bundles
- (unused code paths removed)
- Lesson 2451 — Environment Variables and Build-Time Constants
- Snapshot serializers
- let you define custom rules for how certain types of objects should appear in your snapshot files.
- Lesson 2711 — Snapshot Serializers
- Snapshots
- Automatically save and compare output to detect unexpected changes—especially useful for UI testing.
- Lesson 2655 — Jest: The All-in-One Runner
- Solution
- Use `let` (block-scoped), or create a new scope with an IIFE, or pass `i` as a parameter:
- Lesson 1211 — Common setTimeout PitfallsLesson 1927 — Common Measurement Pitfalls
- Solution 1: Using `encodeURIComponent()`
- Lesson 2356 — Encoding Unicode Strings Safely
- Solution 2: Using `TextEncoder`
- Lesson 2356 — Encoding Unicode Strings Safely
- Solution: Transpilation
- Lesson 1955 — Browser and Node Support
- Sortable
- These strings sort alphabetically in chronological order—perfect for databases and file names.
- Lesson 1630 — toISOString for Standard Format Output
- Source code
- is written with modern syntax (`const`, arrow functions, etc.
- Lesson 2445 — Transpilation for Browser Compatibility
- Source map generation
- Lesson 2462 — SWC and modern bundler foundations
- Source maps
- – detailed mappings back to your original source files
- Lesson 2449 — Development vs Production Builds
- Space separator
- Lesson 828 — join() to Convert Arrays to Strings
- Special object types
- Correctly clones Dates, RegExps, Maps, Sets, ArrayBuffers, typed arrays, and more
- Lesson 2403 — Library Solutions: Lodash cloneDeep
- Special objects
- RegExp, Map, Set lose their behavior
- Lesson 2397 — JSON.parse(JSON.stringify()) Method
- Specific assertions
- express intent clearly and provide context:
- Lesson 2683 — Choosing the Right Assertion
- Specify depth when possible
- instead of using `Infinity`.
- Lesson 895 — Performance Characteristics of flat() and flatMap()
- Spectre attacks
- a hardware vulnerability that allows reading sensitive data from other processes by measuring execution timing with extreme precision.
- Lesson 2181 — Security Requirements for SharedArrayBuffer
- Speed
- Significantly faster startup and execution than Node.
- Lesson 19 — Deno and Bun: Alternative RuntimesLesson 1307 — Parallel vs All: Performance ConsiderationsLesson 2059 — Iterator Memory Overhead vs Direct Array AccessLesson 2499 — The Purpose of LockfilesLesson 2656 — Vitest: The Modern AlternativeLesson 2694 — What is Mocking and Why Mock?
- Speed first
- Real-time systems, animation loops, high-traffic API endpoints where milliseconds multiply across millions of requests.
- Lesson 1933 — Trade-offs: Speed vs Readability vs Maintainability
- spread operator
- uses three dots (`.
- Lesson 959 — What is the Spread Operator?Lesson 1758 — Immutable Array Updates: Adding Elements
- square root
- (the number that, when squared, equals x)
- Lesson 142 — Math.sqrt and Math.cbrt for RootsLesson 1600 — Math.sqrt and Math.cbrt
- Stability
- Your CI/CD pipeline uses the same dependencies as development
- Lesson 2499 — The Purpose of Lockfiles
- Stability Over Novelty
- Teams prioritize feature delivery over syntax modernization.
- Lesson 2105 — When You Might Still See Legacy Decorators
- stack trace
- a text record showing the sequence of function calls that led to the error.
- Lesson 1143 — Error.prototype.stackLesson 1250 — Debugging Nested Callbacks
- Stack traces
- `Error` objects automatically capture where the error occurred, making debugging far easier
- Lesson 1141 — What Can Be ThrownLesson 1153 — Setting the Error Name Property
- Stage 3 approach
- Decorators receive a *value* and context object, then return a new value or replacement function.
- Lesson 2068 — The Stage 3 Decorators Proposal
- Stage 3 Decorators Proposal
- represents the current, near-final specification for decorators in JavaScript.
- Lesson 2068 — The Stage 3 Decorators Proposal
- Staircase pattern
- Memory climbs with each action and never drops
- Lesson 1893 — Performance Monitor for Memory Trends
- start
- searching forward:
- Lesson 165 — Position Parameters in Search MethodsLesson 459 — Flattening Arrays with ReduceLesson 821 — copyWithin(): Copying Elements Within the Same ArrayLesson 890 — The Array.prototype.fill() MethodLesson 2366 — Slicing Blobs
- startIndex
- Where to begin the operation
- Lesson 813 — splice(): The Swiss Army Knife MethodLesson 820 — fill(): Replacing Elements with a Static Value
- State
- stores parameters needed for execution
- Lesson 1846 — The Command PatternLesson 2426 — State and Transition Vocabulary
- State consistency
- Shared state remains consistent across import styles
- Lesson 1435 — Dynamic Import and the Cache
- State is shared
- If a module maintains internal state (like a counter or cached data), that state is shared across all imports.
- Lesson 1407 — Modules Are Singletons
- State management
- where you need unchanged snapshots
- Lesson 689 — Why Object Cloning MattersLesson 789 — Static vs Instance: When to Use Each
- State management is complex
- Objects excel at maintaining internal state across method calls.
- Lesson 1859 — When to Use OOP vs Other Paradigms
- State snapshots
- for undo/redo systems where history must be fully independent
- Lesson 2007 — When to Use structuredClone
- State-dependent behavior
- – When the same event triggers different actions based on current state (clicking "submit" while "idle" vs "processing").
- Lesson 2432 — When to Use FSMs in JavaScript
- Stately
- and other visualizers that render your state machine as a diagram.
- Lesson 2433 — FSM Libraries: XState Overview
- Statement Coverage
- is similar to line coverage but counts logical statements rather than physical lines.
- Lesson 2716 — What Code Coverage MeasuresLesson 2718 — Reading Coverage Reports
- static
- , meaning you always use `Math.
- Lesson 135 — The Math Object and Its Static MethodsLesson 536 — Lexical Binding ExplainedLesson 1420 — What is Dynamic Import?Lesson 1455 — Named Exports Detection
- Static (Lexical) Scope
- The variable's location is determined by where the function is *written* in the code.
- Lesson 490 — Static vs Dynamic Scope
- Static analysis
- Enables tree shaking and better bundling
- Lesson 1449 — When to Use CommonJS in Modern ProjectsLesson 1455 — Named Exports DetectionLesson 2447 — Dead Code EliminationLesson 2472 — CommonJS and Tree Shaking Limitations
- static initialization block
- runs exactly once when the class is evaluated, giving you a dedicated space for this complex initialization.
- Lesson 787 — Static Initialization BlocksLesson 796 — Class Static Initialization Blocks
- static method
- it lives directly on the `Object` constructor, not on the prototype chain.
- Lesson 629 — Object.hasOwn() (Modern Alternative)Lesson 780 — What Are Static Methods?Lesson 1615 — Date.now for Current TimestampLesson 2305 — AbortSignal.timeout for Automatic Cancellation
- static methods
- belong to the class rather than instances, **static properties** are variables stored on the class itself.
- Lesson 785 — Static PropertiesLesson 794 — Accessing Private Fields in Methods
- static scope
- ) means that a function's access to variables is determined by its physical location in the code when you *write* it, not where you *call* it.
- Lesson 82 — Lexical ScopeLesson 490 — Static vs Dynamic Scope
- Steadily climbing
- Continuous upward trend even when idle
- Lesson 1893 — Performance Monitor for Memory Trends
- Step 3: Bind 'this'
- Lesson 732 — What the 'new' Operator Does
- Step-by-step execution
- Lesson 863 — Common Reduce Pattern: Summing Array Values
- Stop and wait
- while it reads, parses, and executes `utils.
- Lesson 1446 — Synchronous Loading in CommonJS
- stop immediately
- , not just exit the inner loop but abandon the entire search.
- Lesson 335 — Common Patterns: Matrix Search and Multi-Level BreakLesson 471 — Short-Circuit Behavior in Some
- stops
- at each `yield` and the value after `yield` becomes the `value` property in the result object.
- Lesson 1098 — The Yield KeywordLesson 1322 — Catch Placement: End vs Middle of Chain
- Storage efficiency counts
- Saving binary data to IndexedDB or file systems that accept ArrayBuffers directly
- Lesson 2360 — Base64 Overhead and When to Avoid It
- Store information
- locally using localStorage or sessionStorage
- Lesson 17 — Browser Runtime: DOM and Web APIs
- Store pending requests
- in a Map with ID as key, resolver callback as value
- Lesson 2176 — Request-Response Patterns with PostMessage
- Store them in variables
- Lesson 385 — Functions as Values
- Stored by value
- When you work with a primitive, you're working with the actual value, not a reference to it.
- Lesson 31 — The Seven Primitive Types
- Storing private data
- for objects you don't control the lifecycle of
- Lesson 1062 — Memory Management Benefits
- Strategy
- Use when you have multiple algorithms for the same task and need to swap them at runtime (payment processors, validation rules).
- Lesson 1850 — When to Use Each Pattern
- Streaming processing
- Handle massive files without loading everything into memory
- Lesson 2291 — Accessing the ReadableStream
- Streams
- Reading file chunks, network data arriving in pieces, or processing large datasets incrementally
- Lesson 2424 — Event Emitter Use Cases and Alternatives
- Stretch the ruler
- by multiplying by your desired range
- Lesson 1602 — Generating Random Integers with Math.random
- strict equality
- (`===`) to compare the switch expression against each case value.
- Lesson 320 — The Switch Statement SyntaxLesson 325 — Strict Equality in SwitchLesson 2673 — Basic Equality AssertionsLesson 2674 — Strict vs Loose Equality in Tests
- Strict equality (`===`)
- requires both type *and* value to match, so a BigInt will never strictly equal a Number, even if they represent the same mathematical value
- Lesson 131 — Comparison and Equality with BigIntLesson 301 — Strict vs Loose Equality
- strict mode
- catches this mistake and throws an error:
- Lesson 75 — Undeclared Variables and Implicit GlobalsLesson 391 — The Function Statement in BlocksLesson 425 — Hoisting in Block ScopeLesson 541 — The Global 'this' ContextLesson 547 — Function Calls: When 'this' is Undefined (Strict Mode)Lesson 752 — Strict Mode Is Always Enabled in Classes
- String
- text wrapped in quotes
- Lesson 31 — The Seven Primitive TypesLesson 37 — String: Sequences of CharactersLesson 280 — ToString Abstract OperationLesson 354 — Introduction to For...in LoopsLesson 679 — JSON.stringify BasicsLesson 1515 — Validating and Coercing Argument Types
- Strings
- → parsed as numeric literals; whitespace is trimmed; empty/whitespace-only strings become `0`; invalid formats become `NaN`
- Lesson 279 — ToNumber Abstract OperationLesson 841 — Array.from with IterablesLesson 1470 — Local Storage and Session StorageLesson 2284 — Request Body Basics
- Strings/symbols only
- → `Object` works fine
- Lesson 1072 — Decision Framework: Choosing the Right Collection
- Strip away unrelated code
- – Remove everything that doesn't contribute to the leak
- Lesson 1894 — Reproducing Leaks Systematically
- structured clone algorithm
- the same mechanism used when posting messages between workers or storing data in IndexedDB.
- Lesson 2004 — What structuredClone Can and Cannot CloneLesson 2005 — structuredClone vs JSON Parse/StringifyLesson 2151 — What Data Can Be Transferred?Lesson 2161 — Structured Clone for Message PassingLesson 2168 — PostMessage Overview: Sending Data Between ContextsLesson 2171 — The Structured Clone Algorithm
- Style issues
- Code that works but violates team conventions (spacing, quotes, naming)
- Lesson 2602 — What Linters Actually Do
- Style preference
- `return await` makes it explicit that you're waiting for an async operation.
- Lesson 1350 — Await and Return Values
- Style tip
- Most developers prefer `function*` with the asterisk touching the keyword, making it immediately recognizable.
- Lesson 1097 — Generator Function Syntax
- subject
- ) maintains a list of dependents (the **observers**) and automatically notifies them when its internal state changes.
- Lesson 2106 — What Is the Observer Pattern?Lesson 2107 — The Subject InterfaceLesson 2109 — Implementing a Simple Subject
- Subjective interpretations
- Is fixing a bug that code depended on a PATCH or a MAJOR?
- Lesson 2526 — Semver in Practice: Trust and Reality
- subscribe
- to an observable, you're saying "call this function whenever new data arrives.
- Lesson 1879 — Observables and SubscriptionsLesson 2106 — What Is the Observer Pattern?
- Subscribing
- is what starts the Observable, like pressing "play" on a streaming service.
- Lesson 2130 — Subscribing to Observables
- Substring checks
- verify that a string contains specific text:
- Lesson 2677 — String Matching Assertions
- SWC
- (Speedy Web Compiler) is a Rust-based platform for compiling, minifying, and bundling JavaScript and TypeScript.
- Lesson 2462 — SWC and modern bundler foundationsLesson 2463 — Comparing bundler performance characteristics
- switch statement
- evaluates an expression once, then compares its value against multiple `case` labels.
- Lesson 320 — The Switch Statement SyntaxLesson 2434 — FSMs vs Other Patterns
- Symbol
- unique identifiers (advanced use)
- Lesson 31 — The Seven Primitive TypesLesson 1001 — What Are Symbols?
- Symbol-keyed properties
- (only string keys are included)
- Lesson 641 — Object.keys() for Own Enumerable String Keys
- Symbols
- are unique, even if they look identical:
- Lesson 57 — Comparing PrimitivesLesson 622 — Computed Keys with SymbolsLesson 686 — Deep Cloning with JSONLesson 694 — structuredClone LimitationsLesson 1822 — Avoiding Mixin Name CollisionsLesson 2003 — structuredClone: Deep Cloning Made EasyLesson 2004 — What structuredClone Can and Cannot CloneLesson 2151 — What Data Can Be Transferred? (+1 more)
- Sync callbacks
- execute immediately during the current call stack:
- Lesson 1231 — Callback Pattern Summary
- Synchronous
- means that JavaScript executes your code sequentially, one statement at a time, in the order it appears.
- Lesson 1170 — What 'Synchronous' Means in JavaScriptLesson 1453 — Requiring ESM from CJSLesson 1517 — FS Module Overview: Sync vs Async vs Promises API
- Synchronous (sync)
- Blocks code execution until the operation completes
- Lesson 1517 — FS Module Overview: Sync vs Async vs Promises API
- synchronous callbacks
- that run immediately when the outer function calls them.
- Lesson 1224 — Asynchronous CallbacksLesson 1225 — Callback Execution Context
- Synchronous iteration
- Array methods like `map`, `filter`, and `forEach` use callbacks to process each element
- Lesson 1231 — Callback Pattern SummaryLesson 2020 — Async Iteration vs Sync Iteration
- Synchronous loading
- Unlike module imports, `importScripts()` blocks execution until all scripts load
- Lesson 2155 — Importing Scripts in Workers
- Synchronous transforms
- Pure calculations on static data don't need reactive overhead.
- Lesson 2139 — Identifying Problems Suited for Reactive Patterns
- synchronously
- at runtime.
- Lesson 1540 — CommonJS require() vs ES Module importLesson 2416 — Registering Event Listeners with on()Lesson 2417 — Emitting Events with emit()
- syntactic sugar
- a cleaner way to write the same thing.
- Lesson 648 — Methods vs Function PropertiesLesson 755 — Comparing Class Syntax to Constructor FunctionsLesson 1201 — Async/Await Under the Hood
- Syntax Complexity
- Nested generics and complex conditional types become unreadable.
- Lesson 2621 — Editor Support and Limitations
- Syntax errors
- Malformed code that would break at runtime (`const x =;`)
- Lesson 2602 — What Linters Actually DoLesson 2603 — Automation vs. Human Judgment
T
- Take one task
- Execute the next task from the task queue, then repeat from step 3
- Lesson 1219 — Tracing Execution with a Diagram
- Take the first snapshot
- before performing an action (like opening a modal, loading data, or running a function)
- Lesson 1887 — Comparing Two Snapshots
- Take the next task
- grab one task from the task queue and repeat
- Lesson 1214 — Order of Execution in the Loop
- Take the second snapshot
- Lesson 1887 — Comparing Two Snapshots
- Task Queue
- (also called Macrotask Queue): Holds regular asynchronous callbacks
- Lesson 1191 — Two Queues: Tasks and MicrotasksLesson 1192 — What Goes in the Task QueueLesson 1194 — Microtasks Run Before TasksLesson 1200 — Mixing setTimeout and PromisesLesson 1205 — Zero Delay Doesn't Mean ImmediateLesson 1207 — setTimeout vs setImmediate (Node.js)Lesson 1213 — The Event Loop Flow DiagramLesson 1215 — Microtasks Always Run Before Tasks (+3 more)
- Team disagreement
- Patchwork disabling indicates your team needs to align on standards
- Lesson 2607 — When to Disable Rules
- Team Experience
- A team familiar with Jest will be productive faster than forcing them to learn something "better.
- Lesson 2661 — Choosing the Right Test Runner
- Team familiarity is low
- well-known symbols have a learning curve
- Lesson 1022 — When to Use Well-Known Symbols
- Team Size and Experience
- influences your choice too.
- Lesson 2465 — Choosing a bundler for your project
- Team unfamiliarity
- Reactive patterns have a learning curve.
- Lesson 2139 — Identifying Problems Suited for Reactive Patterns
- Temperature differences
- , **error margins**, and **coordinate differences** all benefit from `Math.
- Lesson 1596 — Math.abs for Absolute Values
- template literals
- , written with backticks (`` ` ``).
- Lesson 148 — Template Literal SyntaxLesson 619 — Computed Keys with Template Literals
- Temporal Dead Zone (TDZ)
- isn't just a concept—it has a specific lifespan.
- Lesson 94 — TDZ Timeline and DurationLesson 97 — Class Hoisting and the TDZ
- Terms below were extracted from bolded phrases in lesson content. Click a lesson reference to jump
- ternary operator
- is JavaScript's only operator that takes three operands.
- Lesson 227 — The Ternary Operator SyntaxLesson 266 — Precedence Levels Overview
- Test before updating
- Never blindly update; run your test suite first
- Lesson 2526 — Semver in Practice: Trust and Reality
- Test boundary cases
- run your loop with an array of length 0, 1, and 2
- Lesson 349 — Classic Off-by-One Errors
- Test Isolation
- You want to test *your* code, not someone else's API or the reliability of your network connection.
- Lesson 2694 — What is Mocking and Why Mock?
- Testability
- Lesson 1745 — Why Pure Functions Matter
- Testable
- Write a test once, it stays valid forever
- Lesson 1742 — Deterministic Output: Same Inputs, Same Results
- Testing
- You can test each callback in isolation
- Lesson 1254 — Naming Callbacks for ClarityLesson 1262 — Balancing Pragmatism and RefactoringLesson 2510 — NPX vs Global Install
- Testing different versions
- Lesson 2509 — Running One-Off Commands with NPX
- Testing Edge Cases
- Want to test how your code handles a 500 server error or a timeout?
- Lesson 2694 — What is Mocking and Why Mock?
- Text-only channels
- Embedding images in CSS/HTML (`data:` URLs), JSON APIs that only accept strings, email attachments
- Lesson 2360 — Base64 Overhead and When to Avoid It
- there.
- Think of it like
- trailing commas are like keeping an extra chair at the dinner table.
- Lesson 596 — Trailing Commas and ReadabilityLesson 2396 — Shallow vs Deep CopyLesson 2525 — Wildcard and Comparison Operators
- Third iteration
- `sum` is `35`, `price` is `5` → returns `40`
- Lesson 457 — Summing Numbers with ReduceLesson 459 — Flattening Arrays with Reduce
- Third-party code patterns
- A library requires a specific structure that triggers warnings (e.
- Lesson 2607 — When to Disable Rules
- This isn't true
- While `await` pauses execution *within* that specific async function, other code continues running elsewhere.
- Lesson 1392 — Assuming Synchronous Execution Order
- three parameters
- every time it's called:
- Lesson 851 — Map's Callback ParametersLesson 882 — Callback Parameters: element, index, arrayLesson 2102 — Legacy Class and Method Decorators
- three pieces of information
- each time it calls your function:
- Lesson 441 — Map's Callback ParametersLesson 446 — Filter's Callback Parameters
- throttle
- are patterns that use closures to track timing state and limit execution frequency.
- Lesson 517 — Debounce and Throttle FunctionsLesson 2094 — Throttle and Debounce DecoratorsLesson 2387 — What Throttle SolvesLesson 2390 — Debounce vs Throttle: When to Use Which
- Throw an error
- immediately halt execution and jump to the nearest catch block
- Lesson 1149 — Throwing vs Returning Error ValuesLesson 1161 — Throwing vs Returning Errors
- Throw statement
- You can explicitly throw your own errors:
- Lesson 2435 — The Traditional Throw/Try-Catch Pattern
- throws an error
- because JSON cannot represent circular structures:
- Lesson 681 — Serialization Edge CasesLesson 2435 — The Traditional Throw/Try-Catch PatternLesson 2635 — Parsing and Safe Parsing
- Tight loops
- running thousands of times per second
- Lesson 374 — For vs ForEach vs For...of PerformanceLesson 1763 — Performance Considerations with Immutability
- Tightly Coupled Packages
- If you're building packages that frequently need to work together—like a UI component library with its documentation site, or a main application with several plugins—a monorepo ensures changes stay synchronized.
- Lesson 2552 — When a Monorepo Makes Sense
- tilde
- (`~`) when you need extra stability or have experienced breaking changes disguised as MINOR updates.
- Lesson 2523 — Version Ranges in package.jsonLesson 2524 — Caret (^) vs Tilde (~) Ranges
- Tilde (`~`)
- More conservative.
- Lesson 2523 — Version Ranges in package.jsonLesson 2524 — Caret (^) vs Tilde (~) Ranges
- Time delay
- Asynchronous gaps mean the stack resets between callbacks
- Lesson 1250 — Debugging Nested Callbacks
- Timeout regex execution
- in critical paths (though JavaScript doesn't have built-in timeouts)
- Lesson 1740 — ReDoS and Security
- Timers
- (setTimeout, setInterval callbacks)
- Lesson 1218 — Event Loop in Node vs BrowserLesson 1870 — What Qualifies as a Memory Leak in JavaScript
- Timestamps in microseconds
- Going beyond millisecond precision
- Lesson 1972 — When to Use BigInt vs Number
- Timing issues
- Each callback depends on the previous one completing.
- Lesson 1251 — Testing Callback Hell Code
- to
- that treasure chest
- Lesson 721 — Visualizing the prototype vs __proto__ RelationshipLesson 2160 — Communicating via postMessage and 'message' Events
- To check mutability status
- Lesson 637 — Combining Introspection Methods
- To install extensions
- Lesson 29 — Setting Up a Local Development Environment
- ToNumber
- abstract operation without realizing it.
- Lesson 279 — ToNumber Abstract OperationLesson 292 — null and undefined in ArithmeticLesson 294 — Subtracting StringsLesson 295 — Comparison Coercion with Mixed Types
- Too strict
- Teams get frustrated writing tests just to hit numbers, leading to meaningless tests.
- Lesson 2723 — Coverage in CI/CD
- Tooling Requirements
- Do you need monorepo workspaces?
- Lesson 2536 — Choosing the Right Package Manager
- Top-Down Reading Flow
- Many developers prefer organizing functions so you read from high-level to low-level, like a newspaper article.
- Lesson 426 — Best Practices for Function Ordering
- top-level await
- lets you use `await` directly at the top level of an ES module (a file that uses `import`/`export`).
- Lesson 1376 — What Is Top-Level Await?Lesson 1978 — What is Top-Level Await
- Topologically sorts
- updates to ensure parent nodes compute before children
- Lesson 2122 — Signal Graphs and Propagation
- ToPrimitive
- .
- Lesson 281 — ToPrimitive and Symbol.toPrimitiveLesson 289 — Object to Primitive: ToPrimitive Algorithm
- Track async callbacks
- Note when `setTimeout` schedules a task or `.
- Lesson 1219 — Tracing Execution with a Diagram
- Tracking temporary object relationships
- without worrying about cleanup
- Lesson 1062 — Memory Management Benefits
- Traditional `for` loops
- are typically the fastest.
- Lesson 374 — For vs ForEach vs For...of Performance
- Traditional approach
- Lesson 950 — Destructuring Function Parameters with Objects
- Traditional function expression
- Lesson 398 — Arrow Functions with Array Methods
- Traditional nested approach
- Lesson 315 — Guard Clauses and Early Returns
- Trailing
- Search boxes, window resize handlers, autosave — you care about the final state
- Lesson 2385 — Leading vs Trailing Edge DebounceLesson 2389 — Leading and Trailing Options in Throttle
- trailing edge
- (the default).
- Lesson 2385 — Leading vs Trailing Edge DebounceLesson 2389 — Leading and Trailing Options in Throttle
- Transaction costs
- Database or API calls in a loop
- Lesson 1900 — Batch Operations vs Individual Updates
- Transferable objects
- solve this by *transferring ownership* instead of copying.
- Lesson 2152 — Transferable ObjectsLesson 2172 — Transferable Objects: Zero-Copy Data Transfer
- transform
- each element and collect the results:
- Lesson 444 — Map vs ForEachLesson 1548 — What Are Streams?Lesson 1550 — The Four Stream TypesLesson 1834 — Getters and Setters for Controlled Access
- Transformation
- Convert or format data before assignment
- Lesson 660 — Defining Setters with the 'set' Keyword
- Transformations
- let you modify data *after* validation passes.
- Lesson 2638 — Refinements and Transformations
- Transforming
- modern syntax to browser-compatible code
- Lesson 2462 — SWC and modern bundler foundations
- Translation management workflows
- with external translators
- Lesson 2253 — Deciding Between Built-ins and Libraries
- Transpilation
- solves this by converting modern JavaScript into equivalent older syntax that legacy browsers can interpret.
- Lesson 2445 — Transpilation for Browser CompatibilityLesson 2453 — What is a bundler and why do we need one?
- Transpiler
- rewrites it to ES5 or another target version
- Lesson 2445 — Transpilation for Browser Compatibility
- Tree shaking
- removing unused exports
- Lesson 2446 — Dependency ResolutionLesson 2466 — What is Tree Shaking?
- Trigger side effects
- (logging, updating UI when values change)
- Lesson 667 — When to Use Getters/Setters vs Plain Properties
- Truthiness checks
- Lesson 2675 — Truthiness and Falsiness Assertions
- truthy
- values are any values that JavaScript considers "true enough" when used in a boolean context (like an `if` statement or with the `Boolean()` constructor).
- Lesson 195 — Truthy Values: What Evaluates to TrueLesson 214 — The && (AND) OperatorLesson 218 — Short-Circuit Evaluation with ||Lesson 220 — Using || for Default ValuesLesson 249 — Logical Assignment OperatorsLesson 291 — Truthy Objects That Seem FalsyLesson 312 — Truthy and Falsy in Conditions
- Turbopack
- (from Vercel), **Rspack** (Webpack-compatible), and even **Next.
- Lesson 2462 — SWC and modern bundler foundations
- two code units
- (called a "surrogate pair") to store **one code point**.
- Lesson 184 — Code Points vs Code UnitsLesson 186 — String Length and Surrogate PairsLesson 187 — Accessing Characters with charAt vs Bracket Notation
- Two or more parameters
- Parentheses **required** — `(x, y) => .
- Lesson 395 — Parentheses in Arrow Function Parameters
- two parameters
- (`name` and `age`).
- Lesson 406 — Too Many Arguments: Extra ValuesLesson 1791 — The parseInt GotchaLesson 2083 — Decorator Context Object
- Type a constructor name
- (like `Array`, `MyClass`, or `HTMLDivElement`) to see only those instances
- Lesson 1888 — Filtering by Constructor Name
- Type annotations
- Adding missing type hints (in TypeScript contexts)
- Lesson 2590 — Quick Fix and Auto-Fix in Editors
- Type checking
- You can use `instanceof Error` to distinguish errors from normal values
- Lesson 1141 — What Can Be Thrown
- type coercion
- , and it happens automatically behind the scenes.
- Lesson 56 — When == Performs Type CoercionLesson 210 — Comparing Different TypesLesson 274 — What is Type Coercion?Lesson 1515 — Validating and Coercing Argument Types
- Type hints
- that editors understand and use for IntelliSense
- Lesson 2609 — What JSDoc Is and Why It Matters
- Type safety is missing
- In Haskell, the type system enforces functor laws (identity and composition).
- Lesson 1799 — Functor/Monad Pattern Mismatch in JS
- Type-level programming
- treating types themselves as data to transform—is TypeScript's domain.
- Lesson 2649 — Limitations: When TypeScript Becomes Necessary
- TypeError
- if you try to destructure from values that aren't destructurable:
- Lesson 936 — Failed Destructuring and Errors
- TypeScript support
- No setup needed—TypeScript works out of the box
- Lesson 19 — Deno and Bun: Alternative Runtimes
- TypeScript type changes
- Not technically breaking JavaScript, but breaks TypeScript builds
- Lesson 2526 — Semver in Practice: Trust and Reality
U
- UI Events
- Button clicks, mouse movements, keyboard input—events that can fire many times
- Lesson 2424 — Event Emitter Use Cases and Alternatives
- UI state management
- (most updates are small and infrequent)
- Lesson 1763 — Performance Considerations with Immutability
- Uint8Array
- is standard JavaScript available in browsers and all JavaScript environments.
- Lesson 1591 — Buffer and TypedArrays
- Unavoidable browser quirks
- Working around platform-specific issues that look like anti-patterns
- Lesson 2607 — When to Disable Rules
- Unbounded caching
- Lesson 1876 — Growing Arrays and Objects
- uncaught exception
- .
- Lesson 1239 — Error-First vs Throwing ExceptionsLesson 1505 — Process Event: 'uncaughtException'
- uncovered lines
- and **low branch coverage**.
- Lesson 2718 — Reading Coverage ReportsLesson 2721 — Using Coverage to Find Gaps
- Undeclared
- means the variable doesn't exist at all—you never created it
- Lesson 32 — undefined: The Default Value
- Undeclared variables
- Accessing `usrName` when you meant `userName`
- Lesson 2605 — Preventing Bugs Before Runtime
- Undefined
- represents "no value assigned yet"
- Lesson 31 — The Seven Primitive TypesLesson 280 — ToString Abstract OperationLesson 686 — Deep Cloning with JSONLesson 2397 — JSON.parse(JSON.stringify()) Method
- Undefined's subtle differences
- While `undefined === undefined` works, you need to decide whether `null` and `undefined` should be considered equal in your deep comparison (usually they shouldn't be).
- Lesson 2410 — Edge Cases: Null, Undefined, and NaN
- Underscore
- have been refined through years of real-world use, handling edge cases you might not anticipate.
- Lesson 2392 — Using Lodash or Underscore Implementations
- Unexpected changes
- If you pass an array to a function that mutates it, your original data changes
- Lesson 810 — What 'Mutating' Means for ArraysLesson 2707 — What Are Snapshot Tests?
- Unhandled rejections
- If a promise rejects but you don't handle it properly, assertions in the rejection path may never execute, causing tests to pass incorrectly.
- Lesson 2692 — Avoiding False Positives with Assertions
- Unicode
- is a universal standard that assigns a unique number (called a "code point") to every character from every writing system—including letters, numbers, symbols, and even emojis.
- Lesson 183 — What is Unicode and Why It Matters
- Unicode + Case-Insensitive (`ui`)
- Handle Unicode characters properly while ignoring case
- Lesson 1728 — Combining Multiple Flags
- Unicode awareness
- Lesson 1738 — Unicode and Character Classes
- Unified abstraction
- WebSockets, SSE, and polling all become streams you can transform with the same operators
- Lesson 2142 — Real-Time Data and Live Updates
- Union types
- use the pipe operator (`|`) to list alternatives:
- Lesson 2615 — Union Types and Optional Parameters
- Unique execution
- Each module runs once, even if imported multiple times
- Lesson 1408 — Type='module' in HTML
- unit
- (like `"day"`, `"hour"`, `"month"`).
- Lesson 1656 — Formatting Relative Time ValuesLesson 2221 — The format() MethodLesson 2227 — Common Patterns: Calculating Time Differences
- Unit tests
- examine individual functions or methods in isolation—testing one thing at a time.
- Lesson 2671 — Balancing Test Granularity
- Unknown consumers
- You don't know upfront what will need the derived data
- Lesson 2143 — Derived State and Automatic Recalculation
- Unlimited flexibility
- Any sorting logic works without changing `processList`
- Lesson 437 — Functions as Configuration
- Unmarked space
- This car was abandoned — tow it away and mark the space as available
- Lesson 1864 — The Sweep Phase
- Unnecessary currying
- Currying every function "just because" adds cognitive overhead without practical benefit.
- Lesson 1796 — Recognizing Over-Abstraction in Functional Code
- Unquoted property names
- follow JavaScript identifier rules: start with a letter, underscore, or dollar sign; contain only letters, digits, underscores, or dollar signs.
- Lesson 590 — Property Names and Valid Keys
- Unreachable code
- Code after a `return` statement that will never execute
- Lesson 2605 — Preventing Bugs Before Runtime
- Unreadable directly
- You can't access its bytes without using a "view" (like Typed Arrays, which you've already learned about)
- Lesson 2332 — What is an ArrayBuffer?
- Unsafe patterns
- Comparing with `==` instead of `===` when type coercion could cause surprises
- Lesson 2605 — Preventing Bugs Before Runtime
- Unserializable Data
- If you try to send a function, DOM node, or other non-cloneable object, `postMessage` will throw a `DataCloneError`:
- Lesson 2177 — Error Handling in Cross-Context Messaging
- unsubscribe
- , those references stay alive.
- Lesson 1879 — Observables and SubscriptionsLesson 2106 — What Is the Observer Pattern?
- Unused variables
- Removing or commenting out
- Lesson 2590 — Quick Fix and Auto-Fix in EditorsLesson 2605 — Preventing Bugs Before Runtime
- up
- to the nearest integer, like reaching for the ceiling above you.
- Lesson 136 — Rounding: Math.floor, Math.ceil, Math.round, Math.truncLesson 1594 — Math.round, Math.floor, and Math.ceil
- Update packages
- Lesson 2529 — Installing and Using Yarn
- Upgrade pain
- ESLint major versions, plugin updates, and Flat Config migrations require rework
- Lesson 2606 — The Cost of Configuration
- URLSearchParams
- Lesson 2284 — Request Body Basics
- URLSearchParams body
- → `"Content-Type": "application/x-www-form-urlencoded"`
- Lesson 2289 — Content-Type Header and Body Matching
- Use `.catch()` when
- Lesson 1360 — Try/Catch vs .catch() on Promises
- Use `for` loops when
- Lesson 847 — forEach vs For Loop
- Use `forEach` when
- Lesson 847 — forEach vs For LoopLesson 858 — When to Use forEach vs map
- Use `includes()`
- when you only need a yes/no answer: "Does this string contain 'error'?
- Lesson 168 — Choosing the Right Search Method
- Use `indexOf()`
- when you need the position of a substring, or when checking existence in older code.
- Lesson 168 — Choosing the Right Search Method
- Use `JSON.parse(JSON.stringify())` when
- Lesson 2402 — Performance Considerations
- Use `map` when
- Lesson 858 — When to Use forEach vs map
- Use `match()`
- when you need to *extract* matched content, not just find it.
- Lesson 168 — Choosing the Right Search Method
- Use `reduce`
- When working with large datasets where performance matters, or when the transformation logic is naturally combined
- Lesson 868 — Chaining Transformations: When Reduce Replaces Map/Filter
- Use `search()`
- when you need a regex pattern and only care about the *first* match position.
- Lesson 168 — Choosing the Right Search Method
- Use `slice()`
- as your default choice—it's more predictable and handles negative indices logically.
- Lesson 175 — Extracting with substring and substr
- Use `structuredClone()` when
- Lesson 2402 — Performance Considerations
- Use a polyfill library
- (adds missing methods to older environments) or **transpile with Babel** (converts modern code to older-compatible syntax).
- Lesson 1999 — Browser and Node Support
- Use Array Methods
- Lesson 336 — Why Labels Are Rare in Modern JavaScript
- Use arrow functions when
- Lesson 402 — Choosing Between Arrow and Regular FunctionsLesson 578 — When to Choose Arrow vs Regular Functions
- Use Base64 when
- Lesson 2360 — Base64 Overhead and When to Avoid It
- Use BigInt for
- Lesson 1972 — When to Use BigInt vs Number
- Use chained `map`/`filter`
- For clarity and readability in most cases
- Lesson 868 — Chaining Transformations: When Reduce Replaces Map/Filter
- Use class syntax when
- Lesson 743 — When to Use 'new' vs Class Syntax
- Use closures
- for small-scale privacy needs, event handlers, memoization
- Lesson 522 — Avoiding Closure Overhead
- Use composition when
- Lesson 1784 — Composition vs Chaining
- Use constructor functions when
- Lesson 743 — When to Use 'new' vs Class Syntax
- Use default exports when
- Lesson 1417 — When to Use Named vs Default
- Use fallback syntax
- Lesson 1999 — Browser and Node Support
- Use flatMap() over map().flat(1)
- it's optimized to do both operations in one pass.
- Lesson 895 — Performance Characteristics of flat() and flatMap()
- Use Legacy `.eslintrc` when
- Lesson 2575 — Choosing Between Legacy and Flat Config
- Use lockfiles religiously
- They freeze exact versions, preventing surprise updates
- Lesson 2526 — Semver in Practice: Trust and Reality
- Use Map/Set when
- You need iteration, size tracking, or complete control over lifecycle.
- Lesson 1064 — When to Use Weak vs Strong Collections
- Use method chaining when
- Lesson 1784 — Composition vs Chaining
- Use Node's EventEmitter when
- Lesson 2423 — Node.js EventEmitter vs Custom Implementations
- Use Number for
- Lesson 1972 — When to Use BigInt vs Number
- Use private fields (`#`)
- for new code—they're cleaner, faster, and part of the standard.
- Lesson 798 — Private Fields vs WeakMap Pattern
- Use recursive cloning when
- Lesson 2402 — Performance Considerations
- Use regular functions when
- Lesson 402 — Choosing Between Arrow and Regular FunctionsLesson 578 — When to Choose Arrow vs Regular Functions
- Use the DOM's `EventTarget`
- (different API: `addEventListener`, `dispatchEvent`)
- Lesson 2423 — Node.js EventEmitter vs Custom Implementations
- Use this sparingly
- it defeats the purpose of having quality gates and should be documented in your commit message.
- Lesson 2599 — Handling Hook Failures
- Use try/catch when
- Lesson 1360 — Try/Catch vs .catch() on Promises
- Use WeakMap when
- Lesson 1880 — WeakMap and WeakSet as Solutions
- Use WeakMap/WeakSet when
- You're associating data with objects temporarily and want memory-efficient automatic cleanup.
- Lesson 1064 — When to Use Weak vs Strong Collections
- Use WeakMaps
- when you need to add private data to objects you didn't create, or when working in environments that don't support private fields yet.
- Lesson 798 — Private Fields vs WeakMap Pattern
- Use WeakSet when
- Lesson 1880 — WeakMap and WeakSet as Solutions
- Use well-known symbols when
- Lesson 1022 — When to Use Well-Known Symbols
- User actions
- – JavaScript can detect when you click buttons, type in forms, or move your mouse
- Lesson 4 — JavaScript in the Browser
- User expectations
- (research shows 3s load time is a common tolerance threshold)
- Lesson 1932 — Setting Performance Budgets
- User impact
- Actions users perform repeatedly (search, navigation, form submission)
- Lesson 1934 — Hot Paths and Critical User Journeys
- User input
- Lesson 602 — Dynamic Property Access with VariablesLesson 2632 — Why Runtime Validation Matters
- User navigation
- A user clicks away while data is still loading
- Lesson 2300 — Why AbortController Exists
- User preferences
- Object (string keys, JSON-friendly)
- Lesson 1072 — Decision Framework: Choosing the Right Collection
- User-facing labels
- Displaying country names, language choices, or currency selectors to end users
- Lesson 2246 — When to Use ListFormat and DisplayNames
- Using `.then()` and `.catch()`
- like a traditional Promise
- Lesson 1334 — Async Functions Return Promises
- Using `globalThis` comparisons
- Lesson 1467 — Checking for Browser vs Node Environments
- Using `performance.now()`
- Lesson 378 — Profiling Before Optimizing Loops
- Using `return` in functions
- Lesson 377 — Early Exit and Short-Circuiting
- Using `typeof process`
- Lesson 1467 — Checking for Browser vs Node Environments
- Using `typeof window`
- Lesson 1467 — Checking for Browser vs Node Environments
- Using Browser DevTools
- Lesson 378 — Profiling Before Optimizing Loops
- Using Promise.all
- Pass all promises to `Promise.
- Lesson 1307 — Parallel vs All: Performance Considerations
- UTC midnight
- Lesson 1618 — Parsing Ambiguity with Local vs UTCLesson 1635 — The Date Constructor's Timezone Trap
- UTF-16 code unit
- basically a number that represents that character in computer memory.
- Lesson 37 — String: Sequences of Characters
- UTF-8
- encoding—the same format that `TextEncoder` uses by default.
- Lesson 2347 — Creating a TextDecoder Instance
- Utility functions
- that work with the class concept (like `Math.
- Lesson 789 — Static vs Instance: When to Use Each
- Utility libraries and scripts
- If you're writing a CLI tool or small package, JSDoc lets you publish plain `.
- Lesson 2643 — Assessing Project Complexity and Team Size
V
- Validate
- data before storing (age must be positive)
- Lesson 667 — When to Use Getters/Setters vs Plain PropertiesLesson 1834 — Getters and Setters for Controlled Access
- Validation
- Check if incoming values are valid before storing them
- Lesson 660 — Defining Setters with the 'set' KeywordLesson 1038 — Map Size PropertyLesson 1514 — Advanced Parsing with yargsLesson 1515 — Validating and Coercing Argument TypesLesson 2073 — Field DecoratorsLesson 2080 — Accessor Decorators (Getters and Setters)
- Validation overhead
- Running the same checks multiple times
- Lesson 1900 — Batch Operations vs Individual Updates
- value
- The value to fill with (can be any type)
- Lesson 820 — fill(): Replacing Elements with a Static ValueLesson 890 — The Array.prototype.fill() MethodLesson 2221 — The format() MethodLesson 2338 — Writing with DataView Set Methods
- values
- are inside this collection?
- Lesson 359 — For...of vs For...in: Key DifferencesLesson 642 — Object.values() and Object.entries()Lesson 1239 — Error-First vs Throwing Exceptions
- Values only
- → Consider `Array` or `Set`
- Lesson 1072 — Decision Framework: Choosing the Right Collection
- Variable assignments
- If you write `let count = 0`, TypeScript infers `count` is a number.
- Lesson 2623 — How @ts-check Uses Type Inference
- Variable names remain meaningful
- during step-through debugging
- Lesson 2480 — Using Source Maps in Browser DevTools
- Verdaccio
- (self-hosted private registry), **GitHub Packages**, **JFrog Artifactory**, and regional mirrors.
- Lesson 2496 — The NPM Registry and Alternatives
- Verify Interactions
- Mocks let you confirm that your code *called* a dependency correctly—with the right arguments, at the right time, the right number of times—without needing the real implementation.
- Lesson 2694 — What is Mocking and Why Mock?
- version
- Starting version (usually `1.
- Lesson 2485 — npm init and Creating package.jsonLesson 2492 — npm search and Finding Packages
- Versus a simple loop
- Lesson 1800 — Performance Costs of Heavy Functional Composition
- view
- a window into a portion of the original Buffer's memory.
- Lesson 1588 — Slicing BuffersLesson 2327 — Typed Array Methods: Set and Subarray
- Violates Single Responsibility Principle
- Each class should have one clear purpose.
- Lesson 1851 — God Objects: When One Class Does Everything
- Vite
- strikes a middle ground here—lightning-fast development via esbuild, then Rollup for production with more optimization control.
- Lesson 2463 — Comparing bundler performance characteristics
- Vite's `rollup-plugin-visualizer`
- works during production builds
- Lesson 2473 — Verifying Tree Shaking Results
- Vitest
- is the modern challenger, designed for projects using Vite.
- Lesson 2652 — The Test Runner Landscape
- VS Code
- Lesson 2581 — Format-on-Save in Your EditorLesson 2586 — Prettier Editor ExtensionsLesson 2587 — Format on Save Configuration
- Vue
- Not removing listeners added in `mounted` when `beforeUnmount` fires, or forgetting to unsubscribe from watchers.
- Lesson 1881 — Memory Leak Patterns in Frameworks
W
- Wait
- The function waits for the awaited Promise to settle
- Lesson 1339 — Async Function Execution ModelLesson 1377 — Module Loading and Execution Order
- Wanted
- The latest version that satisfies your `package.
- Lesson 2493 — npm outdated and Version Checking
- Wasted effort
- Time spent optimizing code that wasn't slow to begin with
- Lesson 1928 — Premature Optimization Is the Root of All Evil
- Watch out
- `"10" < "9"` is `true` because string comparison happens character-by-character, not numerically!
- Lesson 206 — Greater Than and Less Than
- WeakMap
- is a special collection similar to Map, but with strict limitations on what can be used as keys.
- Lesson 1056 — WeakMap Basics and Key RestrictionsLesson 1831 — WeakMap for Private DataLesson 1880 — WeakMap and WeakSet as Solutions
- WeakMap/WeakSet
- when you're storing metadata *about* objects that should be cleaned up automatically when those objects are no longer needed.
- Lesson 532 — Closures vs Weak References
- WeakSet
- is perfect when you need to keep track of *which objects* you've already seen or processed, but you don't want to prevent those objects from being cleaned up when they're no longer needed elsewhere in your code.
- Lesson 1061 — WeakSet Use Case: Tracking Object SetsLesson 1880 — WeakMap and WeakSet as Solutions
- Web APIs
- .
- Lesson 17 — Browser Runtime: DOM and Web APIsLesson 2343 — Why TextEncoder and TextDecoder Exist
- Web Workers
- solve this by running JavaScript in separate **background threads**.
- Lesson 2147 — What Are Web Workers?Lesson 2191 — Main Thread Blocking and User Experience
- Web.dev
- (by Google) focuses on modern web platform features and best practices
- Lesson 1495 — Where to Learn More About Web Development
- WebKit integration
- Tightly integrated with WebKit, Apple's browser rendering engine
- Lesson 12 — JavaScriptCore: Safari's Engine
- Webpack
- offers an extensive plugin ecosystem and handles virtually any build requirement imaginable.
- Lesson 2463 — Comparing bundler performance characteristics
- Webpack Bundle Analyzer
- creates an interactive treemap showing which modules and code ended up in your bundle
- Lesson 2473 — Verifying Tree Shaking Results
- WebRTC (Web Real-Time Communication)
- enables peer-to-peer audio, video, and data sharing directly between browsers without requiring a server middleman.
- Lesson 1494 — Web APIs Beyond the DOM
- WebStorm/IntelliJ
- Lesson 2581 — Format-on-Save in Your EditorLesson 2586 — Prettier Editor Extensions
- weekday
- `'narrow'`, `'short'`, `'long'`
- Lesson 1632 — toLocaleString with Custom Format OptionsLesson 2212 — Weekday and Era Options
- Welsh
- has separate plural rules for masculine and feminine nouns
- Lesson 2228 — Understanding Pluralization Across Languages
- What JSON loses
- Lesson 2005 — structuredClone vs JSON Parse/Stringify
- What's the opportunity cost
- Could those optimization hours be better spent on features users actually want?
- Lesson 1935 — When Good Enough Is Actually Good Enough
- What's your bundle budget
- (tight → custom or micro-library like `fast-deep-equal`)
- Lesson 2413 — When to Use Libraries vs Rolling Your Own
- When it matters
- For large modules in browsers, dynamic `import()` prevents blocking the main thread.
- Lesson 1429 — Dynamic Import vs require()
- When the response arrives
- , the promise resolves with a `Response` object
- Lesson 2255 — Your First Fetch Call
- When to use
- Open-source projects, internal tools, or when code protection isn't a concern.
- Lesson 2481 — Source Maps in Production
- When to Use Each
- Modern JavaScript favors spread for its readability.
- Lesson 978 — Object Spread vs Object.assign
- When to use them
- Lesson 1705 — Non-Capturing Groups
- When to use what
- Lesson 1897 — Choosing the Right Data Structure
- Where's the bug
- The chain is spread across multiple files with no clear execution path.
- Lesson 2116 — When Observers Create Complexity
- Whitelist known origins
- Only accept messages from domains you explicitly trust
- Lesson 2178 — Security: Validating Message Origins
- Why
- The IEEE 754 floating-point standard (which JavaScript follows) dictates that any operation producing an indeterminate result should never equal another indeterminate result.
- Lesson 58 — Special Cases: NaN, -0, and +0Lesson 1211 — Common setTimeout Pitfalls
- Why does `-0` exist
- The floating-point standard includes it to preserve sign information in calculations near zero, useful in advanced scientific computing.
- Lesson 58 — Special Cases: NaN, -0, and +0
- Why the parentheses
- Without them, JavaScript sees `{` and thinks you're starting a code block, not an object pattern.
- Lesson 933 — Destructuring Without Declaration
- Why this is wrong
- The `async` function inside the executor *already* returns a Promise.
- Lesson 1393 — Creating Promises Unnecessarily
- Will requirements change unpredictably
- Mixins and factories adapt more gracefully than deep hierarchies.
- Lesson 1815 — Trade-offs and Maintainability
- Will requirements grow
- (yes → library provides room to scale)
- Lesson 2413 — When to Use Libraries vs Rolling Your Own
- Window object
- is the global browser environment.
- Lesson 1490 — The DOM and Window as Browser-Specific APIs
- Window resize complete
- Recalculate layout only when resizing ends
- Lesson 2390 — Debounce vs Throttle: When to Use Which
- Window resize during
- Update live preview while actively resizing
- Lesson 2390 — Debounce vs Throttle: When to Use Which
- Window resize handlers
- Only recalculate layout once resizing stops.
- Lesson 2383 — What Debounce Solves
- Window resizing
- Dragging a window corner fires dozens or hundreds of resize events per second.
- Lesson 2383 — What Debounce Solves
- With
- a trailing comma, you only touch one line:
- Lesson 596 — Trailing Commas and ReadabilityLesson 741 — Guarding Against Missing 'new'
- With 'g' (global)
- `match()` returns an array of **all matching strings**, but loses the extra details (no indices, no captured groups).
- Lesson 166 — Global vs Non-Global Regex Matches
- With `&&` (AND)
- Lesson 223 — Logical Operators Return Operands, Not Booleans
- With `g`
- It returns an array of *all matches* (no capture groups included!
- Lesson 1722 — The Global Flag and Match Behavior
- With a lockfile present
- npm installs the *exact* versions recorded in the lockfile, ignoring the ranges (unless you explicitly update)
- Lesson 2501 — Installing Exact vs Range Versions
- With arrow function
- Lesson 398 — Arrow Functions with Array Methods
- With arrow function (works)
- Lesson 654 — Using Arrow Functions as Callbacks
- With explicit arguments
- Lesson 482 — Point-Free Style with Composition
- With parameter destructuring
- Lesson 950 — Destructuring Function Parameters with Objects
- With the `m` flag
- `^` matches the start of any line, `$` matches the end of any line
- Lesson 1691 — String Start and End: \A and \Z (Not in JS)
- without
- adding a newline character—it's purely for formatting your code, not the string's content.
- Lesson 147 — Multi-line Strings with BackslashesLesson 596 — Trailing Commas and ReadabilityLesson 741 — Guarding Against Missing 'new'
- Without 'g' (non-global)
- `match()` returns an array with the **first match** plus extra details like the index and captured groups.
- Lesson 166 — Global vs Non-Global Regex Matches
- Without a lockfile
- npm resolves the ranges freshly, picking the latest version that satisfies each range
- Lesson 2501 — Installing Exact vs Range Versions
- Without arrow function (broken)
- Lesson 654 — Using Arrow Functions as Callbacks
- Without the `m` flag
- `^` matches the start of the string, `$` matches the end of the string (exactly what `\A` and `\Z` do in other languages)
- Lesson 1691 — String Start and End: \A and \Z (Not in JS)
- Worker threads
- are Node.
- Lesson 2158 — What Are Worker Threads in Node.js?Lesson 2191 — Main Thread Blocking and User Experience
- Working with large datasets
- Avoid loading millions of items into memory at once
- Lesson 1127 — When to Choose Lazy vs. Eager
- Working with shared data
- If multiple parts of your code reference the same array, mutation creates unpredictable side effects.
- Lesson 837 — When to Prefer Non-Mutating Methods
- Workspace settings
- solve this by creating project-level configuration files that override individual editor preferences.
- Lesson 2589 — Workspace Settings for Teams
- Wrapping and rethrowing
- means catching an error, creating a new error with additional information, and throwing that new error instead.
- Lesson 1166 — Wrapping and Rethrowing Errors
- Wraps
- the primitive in a special object (a String, Number, or Boolean wrapper)
- Lesson 43 — Primitive Wrapper Objects
- Writable
- (you send data), **Duplex** (both), and **Transform** (modify data as it flows).
- Lesson 1548 — What Are Streams?Lesson 1550 — The Four Stream Types
- Writable side
- `write()`, `end()` methods, plus `'drain'` and `'finish'` events
- Lesson 1561 — What Are Duplex Streams?
- Writable streams
- when all data has been flushed to the underlying system.
- Lesson 1560 — Stream Events Reference
- Write readable code first
- Use composition where it clarifies intent.
- Lesson 1786 — Performance Considerations
- Writing constructors
- – Arrow functions cannot be used with `new` because they don't create their own `this` binding.
- Lesson 578 — When to Choose Arrow vs Regular Functions
- written
- inside `first`, which is **written** in the global scope.
- Lesson 492 — Lexical Scope is Determined at Parse TimeLesson 536 — Lexical Binding Explained
- Wrong approach
- Lesson 720 — Common Mistakes: Confusing the Two
- Wrong workspace
- – Extensions may only activate when a `package.
- Lesson 2592 — Troubleshooting Editor Integration Issues
X
- XState
- abstract away boilerplate, enforce structure, and add powerful features you'd otherwise have to reimplement.
- Lesson 2433 — FSM Libraries: XState Overview
Y
- YAML
- if your team prefers its readability.
- Lesson 2565 — Understanding ESLint Configuration FilesLesson 2583 — Prettier for More Than JavaScript
- Yarn
- (both Classic and Berry) improved on npm's original speed through better parallelization and caching strategies.
- Lesson 2534 — Performance Comparisons: Speed and Disk Usage
- Yarn (Classic and Berry)
- Very similar syntax to npm, also using the `"workspaces"` field.
- Lesson 2549 — Workspaces in npm, Yarn, and pnpmLesson 2551 — Running Scripts Across Workspaces
- Yarn Berry (2+)
- introduced revolutionary concepts that break from decades of JavaScript convention.
- Lesson 2528 — Yarn Classic vs Yarn Berry (v2+)
- Yarn Berry (PnP)
- No `node_modules` at all—dependencies live in a single `.
- Lesson 2534 — Performance Comparisons: Speed and Disk Usage
- Yarn Berry (v2+)
- uses a different approach where you enable it per-project, but for now, Classic is simpler to start with.
- Lesson 2529 — Installing and Using Yarn
- Yarn Classic (1.x)
- follows the traditional `node_modules` approach similar to npm, **Yarn Berry (2+)** introduced revolutionary concepts that break from decades of JavaScript convention.
- Lesson 2528 — Yarn Classic vs Yarn Berry (v2+)
- Yarn Workspaces
- solve this by treating multiple packages as a unified project.
- Lesson 2530 — Yarn Workspaces for Monorepos
- yes
- → instance member.
- Lesson 789 — Static vs Instance: When to Use EachLesson 1072 — Decision Framework: Choosing the Right CollectionLesson 2247 — Identifying Simple i18n Requirements
- Yield Control
- JavaScript returns control to the caller, allowing other code to run
- Lesson 1339 — Async Function Execution Model
- you
- set deliberately to say "this should be empty right now.
- Lesson 33 — null: Intentional AbsenceLesson 1140 — The throw StatementLesson 2057 — Lazy Iterators and For-OfLesson 2497 — Understanding package.json Dependencies
- You continue your day
- You don't freeze in place waiting — you go about your business until they call back
- Lesson 1221 — What is a Callback?
- You have dynamic indices
- When a variable might be positive or negative, `at()` handles both naturally
- Lesson 1993 — at() vs Bracket Notation
- You need else-if chains
- When comparing multiple distinct conditions, else-if reads naturally:
- Lesson 319 — When to Choose If/Else Over Alternatives
- You need guaranteed uniqueness
- – Set enforces this automatically
- Lesson 1066 — Array vs Set: Handling Unique Values
- You need polymorphism
- When multiple types share an interface (like different payment processors all implementing `processPayment()`), OOP patterns make swapping implementations clean.
- Lesson 1859 — When to Use OOP vs Other Paradigms
- You need precise control
- over how operators or built-in methods treat your objects (`Symbol.
- Lesson 1022 — When to Use Well-Known Symbols
- You want flexible composition
- – Object A needs mixins X and Y, Object B needs Y and Z, Object C needs only X
- Lesson 1813 — When to Choose Mixins
- You want lexical 'this'
- – Any time you need `this` to refer to the enclosing scope rather than the call-site, arrows are your tool.
- Lesson 578 — When to Choose Arrow vs Regular Functions
- You're doing one-off operations
- Creating a class for a single data transformation is over-engineering.
- Lesson 1859 — When to Use OOP vs Other Paradigms
- You're transforming data
- Processing arrays, formatting strings, or computing values?
- Lesson 1859 — When to Use OOP vs Other Paradigms
- You're writing application code
- , not reusable abstractions — most apps never need them
- Lesson 1022 — When to Use Well-Known Symbols
- Your object is simple
- plain data objects rarely need custom behavior
- Lesson 1022 — When to Use Well-Known Symbols
Z
- Zero
- if they're equal (order doesn't matter)
- Lesson 819 — sort() with Comparator FunctionsLesson 898 — Writing a Numeric ComparatorLesson 1663 — Locale-Specific Plural CategoriesLesson 2235 — The compare() Method
- Zero parameters
- Parentheses **required** — `() => .
- Lesson 395 — Parentheses in Arrow Function Parameters
- Zero runtime overhead
- comments are ignored during execution
- Lesson 2609 — What JSDoc Is and Why It Matters
- Zero-installs
- Commit the cache to version control for instant setup
- Lesson 2528 — Yarn Classic vs Yarn Berry (v2+)
- Zipping
- take one element from each iterable in turn, pairing them together until one runs out.
- Lesson 1094 — Combining Multiple Iterators
- Zod schemas
- at the boundaries where data enters your application—API responses, form submissions, file uploads.
- Lesson 2650 — The Pragmatic Middle Ground