Skip to content

Feature Timeline

JavaScript evolves through annual ECMAScript releases. Here’s a timeline of major features.

timeline
title JavaScript Evolution
ES6 (2015) : let/const, arrow functions, classes, promises, modules, template literals, destructuring, spread/rest, Map/Set, Symbol, proxies
ES7 (2016) : Array.includes, exponentiation operator (**)
ES8 (2017) : async/await, Object.values, Object.entries, String.padStart, trailing commas
ES9 (2018) : rest/spread for objects, async iteration, Promise.finally
ES10 (2019) : Array.flat, Array.flatMap, Object.fromEntries, String.trimStart/trimEnd
ES11 (2020) : nullish coalescing (??), optional chaining (?.), globalThis, BigInt, Promise.allSettled
ES12 (2021) : String.replaceAll, Promise.any, logical assignment (&&=, ||=, ??=)
ES13 (2022) : Array.at, Error cause, top-level await, private class fields (#)
ES14 (2023) : Array findLast, Array toReversed/toSorted/toSpliced
YearVersionImpact
2015ES6Biggest update — transformed JavaScript
2017ES8async/await changed async programming
2020ES11Optional chaining, nullish coalescing
  • ES6 (2015) was the most significant update
  • Annual releases since 2016 provide steady improvements
  • Features go through TC39 stages (0-4) before inclusion
  • Modern browsers support ES6+ features well