Skip to content
Journey to Code

Series

JavaScript Evolution: From Scripting Language to Modern Development Platform

JAVASCRIPT // PLATFORM EVOLUTION

Everyday JavaScript problems, and the modern built-in that fixes each one. Learn it, try it in a runnable example, and check that it is safe to ship.

For developers who write JavaScript every day, learned it in pieces, and are not sure which newer features are safe to use. You should be able to read functions, arrays and objects. Nothing else is assumed.

  1. Browser scriptingJavaScript begins in the browser.
  2. ES5 & Node.jsA language milestone; a new server runtime.
  3. ES2015 (ES6)Modules, classes, promises, let and const.
  4. ES2017async and await.
  5. ES2020Optional chaining and nullish coalescing.
  6. ES2022Private class fields and static blocks.
  7. ES2025Iterator helpers and new Set methods.
  8. NOW
    Runtime ecosystemBrowsers, Node.js, Deno, Bun. Temporal finished in March 2026; check support before you use it.

I want to... then read

I want to...Then read
Understand why old JavaScript code looks the way it doesFrom Browser Script to Web Platform
Stop writing var and nested callbacksThe Transformation of Modern JavaScript, then Enhancing JavaScript's Async Capabilities
Copy, merge, flatten or reshape dataSmooth Operators
Stop crashing on undefined, set correct defaults, and do exact math with very large whole numbersNullish Coalescing, Optional Chaining, and BigInts
Make class fields private, and change arrays without mutating themJavaScript's Evolution Continues
Group items by key, and settle a promise from outsideStreamlining Asynchronous Code
Process huge or endless data without building arrays, and see which proposals are finishedIterator Helpers

Support and proposal statuses in these posts were last checked in October 2026 against MDN's compatibility data and the TC39 proposals repository. Each post dates its own claims.

THE EVOLUTION LAB / SAME TASK, NEW TOOLS

Watch the language
get out of your way.

Pick a milestone. Compare two approaches, then run the fixed examples against the same sample data. Both run in your current browser, not an emulated older engine. No requests, packages, or editable code execution.

ES5-STYLE / CALLBACK TRANSFORMATION
function labels(items) {
  return items.map(function (item) {
    return item.name;
  });
}
ES2015 / ARROW FUNCTION
const labels = (items) =>
  items.map((item) => item.name);

Two equivalent transformations for plain data objects. Arrow functions do not replace every traditional function: their this binding is different.

One language. Many engines and runtimes.

  • Engine / V8
  • Engine / SpiderMonkey
  • Engine / JavaScriptCore
  • Runtime / Node.js
  • Runtime / Deno
  • Runtime / Bun

Engine and runtime names show the ecosystem, not verified feature support. Article discussions reflect their publication dates; proposal stages and compatibility can change.

Read the epochs

The posts below are in reading order, from JavaScript's foundations through modern syntax and asynchronous code to iterator helpers. New installments are added to this list when they are published.

  1. From Browser Script to Web PlatformHow JavaScript went from a quick browser script to a web platform, and the rough edges ES6 later fixed. · 8 min read
  2. The Transformation of Modern JavaScriptES6 gave JavaScript let and const, arrow functions, classes, promises and modules. See each old habit break before the fix. · 7 min read
  3. Smooth OperatorsFilter users and key them by id with spread, flatMap and Object.fromEntries, plus the other small ES2018 and ES2019 additions. · 6 min read
  4. Enhancing JavaScript's Async CapabilitiesAwait two requests so the waits overlap and two 1-second jobs finish in about 1 second, plus the small ES2016 additions. · 5 min read
  5. Nullish Coalescing, Optional Chaining, and BigIntsRead deep values safely with optional chaining, set defaults without losing 0 or an empty string, and use BigInt for exact large integers. · 5 min read
  6. JavaScript's Evolution ContinuesKeep a class value truly private with ES2022, and sort an array without rearranging the original using toSorted() from ES2023. · 7 min read
  7. Streamlining Asynchronous CodeTry the ES2024 additions with runnable examples, from Object.groupBy to Promise.withResolvers, and see which work in browsers today. · 6 min read
  8. Iterator HelpersTake the first three multiples of 7 from an endless sequence with iterator helpers, and see which ES2025 features run in Node 22.12. · 11 min read