ECMAScript 5 (2009)
- Strict Mode (
'use strict'): Enforces better coding practices.
- Array Methods:
forEach, map, filter, reduce, some, every.
- Object Methods:
Object.keys(), Object.create().
- Getter/Setter Properties: Define computed properties.
- JSON Support:
JSON.parse(), JSON.stringify().
bind() Method: Binds this to a function.
- Property Descriptors: Control property attributes like
writable, configurable.
ECMAScript 6 (ES6) - 2015
let and const: Block-scoped variables.
- Arrow Functions (
=>): Shorter syntax for functions.
- Template Literals: String interpolation using backticks.
- Default Parameters: Function parameters with default values.
- Destructuring: Extract values from objects/arrays.
- Spread (
...) and Rest Parameters: Expanding and collecting values.
- Classes (
class): Syntactic sugar over constructor functions.
- Modules (
import / export): Native module support.
- Promises: Handle asynchronous operations.
Map and Set: New data structures.
- Generators (
function*): Pause and resume execution.
ECMAScript 7 (ES7) - 2016
- Exponentiation Operator (
**): 2 ** 3 === 8.
Array.prototype.includes(): Check if an array contains a value.
ECMAScript 8 (ES8) - 2017
- Async/Await: Simplifies working with Promises.
- Object Entries and Values:
Object.entries(), Object.values().
- String Padding:
padStart(), padEnd().
- Trailing Commas in Function Parameters: Avoid syntax errors in version control.
- Shared Memory & Atomics: Multi-threaded JS via
SharedArrayBuffer.
ECMAScript 9 (ES9) - 2018
- Rest/Spread in Objects:
{ ...obj }.
- Promise.prototype.finally(): Runs after a Promise resolves/rejects.
- Asynchronous Iteration (
for await...of): Async iterators.
ECMAScript 10 (ES10) - 2019
Array.prototype.flat() & flatMap(): Flatten nested arrays.
Object.fromEntries(): Convert key-value pairs into objects.
- Optional Catch Binding:
catch { } without explicitly defining an error variable.
- String Trim Methods:
trimStart(), trimEnd().
- Symbol Description:
Symbol('desc').description.
ECMAScript 11 (ES11) - 2020
- BigInt (
123n): Large integer support.
- Dynamic
import(): Asynchronous module loading.
- Nullish Coalescing (
??): x = a ?? 'default'.
- Optional Chaining (
?.): Safe property access.
Promise.allSettled(): Resolves after all Promises settle.
- String
matchAll(): Returns all matches in a string.
- Global
This (globalThis): Unified global object access.
ECMAScript 12 (ES12) - 2021
- Numeric Separators (
1_000_000): Improves readability.
replaceAll(): Replace all instances in a string.
- WeakRefs & FinalizationRegistry: Manage memory manually.
- Logical Assignment (
&&=, ||=, ??=): Shorter conditional assignments.
ECMAScript 13 (ES13) - 2022
at() Method: Access array elements via negative indices.
Object.hasOwn(): Better alternative to hasOwnProperty.
- Class Private Fields & Methods:
#privateField.
- Top-Level
await: await outside async functions.
ECMAScript 14 (ES14) - 2023
- Array
findLast() & findLastIndex(): Find last matching element.
- Set Methods:
union(), intersection(), difference(), symmetricDifference().
- Hashbang (
#!) in Scripts: Support for Unix-style shebangs.
- Symbols as WeakMap Keys: Improved memory handling.
Upcoming Features (ESNext)
- Explicit Resource Management (
using): Auto-dispose resources.
- Temporal API: Improved date/time handling.
- Pipeline Operator (
|>): Streamline function chaining.