Part 30 — Appendix
ECMAScript version timeline, Common quirks (quick answers), Common beginner mistakes, Interview traps checklist, Glossary (A–Z, condensed)
ECMAScript version timeline#
| Version | Year | Highlights |
|---|---|---|
| ES1–3 | 1997–1999 | base language, regex, try/catch |
| ES5 | 2009 | strict mode, JSON, array iteration, property descriptors, Object.create/defineProperty |
| ES6/ES2015 | 2015 | let/const, arrow fns, classes, modules, promises, Map/Set, template literals, destructuring, default/rest/spread, generators, Symbol, Proxy/Reflect |
| ES2016 | 2016 | **, Array.includes |
| ES2017 | 2017 | async/await, Object.entries/values, string padding |
| ES2018 | 2018 | rest/spread for objects, async iteration, Promise.finally, regex improvements |
| ES2019 | 2019 | Array.flat/flatMap, Object.fromEntries, optional catch binding, trimStart/End |
| ES2020 | 2020 | optional chaining ?., nullish ??, BigInt, Promise.allSettled, globalThis, dynamic import, matchAll |
| ES2021 | 2021 | replaceAll, logical assignment &&= ||= ??=, Promise.any, numeric separators, WeakRef |
| ES2022 | 2022 | class fields, private #, static blocks, top-level await, Array.at, Object.hasOwn, error.cause, #x in obj |
| ES2023 | 2023 | immutable array methods toSorted/toReversed/toSpliced/with, findLast/findLastIndex, hashbang |
| ES2024 | 2024 | Object.groupBy, Promise.withResolvers, Array.fromAsync, Atomics.waitAsync, well-formed unicode strings |
| ES2025 | 2025 | Iterator helpers (map/filter/take/drop on iterators), Set methods (union/intersection/difference), RegExp.escape, import attributes, duplicate named capture groups |
Common quirks (quick answers)#
typeof null === "object"— historical bug.NaN !== NaN— IEEE-754; useNumber.isNaN.0.1 + 0.2 !== 0.3— float precision.[] + []is"";{} + []is0at statement start.sort()sorts as strings by default.Math.max()is-Infinity;Math.min()isInfinity."😀".length === 2— surrogate pairs.new Date(2025, 1, 1)is February (0-indexed months).- Arrays are objects;
typeof [] === "object".
Common beginner mistakes#
Using var; relying on coercion; == instead of ===; mutating state directly in framework code; forgetting await; await in forEach; not returning inside .then; missing .catch; setting innerHTML from user input; comparing objects with === expecting value equality; forgetting break in switch; off-by-one and 0-indexed months; not clearing timers/listeners.
Interview traps checklist#
Loop + closure (var vs let) · micro vs macrotask order · this loss on detached methods · shallow vs deep copy · float equality · NaN checks · falsy list · Promise.all fail-fast vs allSettled · hoisting/TDZ · prototype chain · sequential vs parallel await · [] == ![].
Glossary (A–Z, condensed)#
ASI automatic semicolon insertion · Binding name↔value link · Closure fn + captured scope · Coercion implicit type conversion · Currying f(a)(b)(c) · Deopt engine dropping optimized code · Event loop scheduler for async callbacks · Falsy values coercing to false · Generator pausable function (function*) · Hoisting declarations processed first · IIFE immediately-invoked fn expression · JIT just-in-time compilation · Lexical scope scope by source position · Macrotask timer/IO callback · Microtask promise callback · Mutation changing a value in place · Prototype object an object inherits from · Pure function no side effects, deterministic · Realm an execution environment (iframe/worker) · TDZ temporal dead zone · Thunk deferred computation · Tree shaking dead-code elimination · Truthy values coercing to true · WeakMap object-keyed, GC-friendly map.
FAQ#
Do I need TypeScript? For anything non-trivial or team-based, strongly recommended — it catches whole classes of bugs at author time.
Is JavaScript multithreaded? The language runs on one thread; you get concurrency via the event loop and true parallelism via Web Workers / worker threads.
When BigInt vs Number? Exact integers beyond 2^53−1; never for decimals or perf-critical arithmetic.
localStorage or cookies for auth tokens? Prefer httpOnly cookies to reduce XSS token theft.
End of handbook. This is a dense reference covering all 30 parts; the interview bank and exercise/project sets are intentionally curated rather than exhaustive — ask to expand any tier or generate any project's full solution as its own file.