Histoire¶
JavaScript est ne en 10 jours chez Netscape en 1995, conçu par Brendan Eich pour animer les pages web. Depuis, il est devenu le seul langage universel du navigateur, puis a conquis le serveur avec Node.js, le mobile avec React Native, et le desktop avec Electron.
Origines : Brendan Eich et Netscape (1995)¶
En 1995, Netscape cherche à enrichir son navigateur Navigator avec un langage de script léger, distinct de Java. Brendan Eich développé le premier prototype en seulement 10 jours. Le langage est d'abord appelé Mocha, puis LiveScript, avant d'être renomme JavaScript pour profiter de la popularité de Java — une décision purement marketing.
JavaScript est intégré dans Netscape Navigator 2.0 en decembre 1995. Microsoft répond rapidement avec JScript dans Internet Explorer 3.0 (1996), une implémentation compatible mais distincte.
Standardisation ECMAScript¶
Face à la fragmentation entre implémentations, Netscape soumet JavaScript à l'ECMA International en 1996. Le standard ECMAScript est publie en 1997.
| Version | Année | Apports majeurs |
|---|---|---|
| ES1 | 1997 | Première spécification officielle |
| ES3 | 1999 | Expressions régulières, try/catch, améliorations de chaînes |
| ES5 | 2009 | Mode strict, JSON natif, Array.forEach/map/filter, Object.keys |
| ES6 / ES2015 | 2015 | let/const, arrow functions, classes, modules, Promises, destructuring, template literals |
| ES2016 | 2016 | Array.includes, opérateur ** |
| ES2017 | 2017 | async/await, Object.entries/values, SharedArrayBuffer |
| ES2018 | 2018 | Rest/spread sur objets, Promise.finally, iterations asynchrones |
| ES2019 | 2019 | Array.flat, Object.fromEntries, Optional catch binding |
| ES2020 | 2020 | Optional chaining ?., Nullish coalescing ??, BigInt, Promise.allSettled |
| ES2021 | 2021 | Logical assignment (&&=, ` |
| ES2022 | 2022 | Top-level await, class fields, at() sur tableaux, Object.hasOwn |
| ES2023 | 2023 | Array.findLast, Array.toSorted/toReversed (immutable), Hashbang Grammar |
| ES2024 | 2024 | Promise.withResolvers, Object.groupBy, Map.groupBy, ArrayBuffer.resize |
Cycle annuel
Depuis ES2015, TC39 (le comite technique) publie une nouvelle version chaque année en juin. Les propositions suivent un processus en 5 stages (0 a 4) avant intégration dans le standard.
Les guerres des navigateurs et le DOM¶
Les années 1997-2006 sont marquées par une fragmentation intense : IE et Netscape implementent des API DOM incompatibles. La naissance de jQuery (2006) par John Resig unifie l'accès au DOM avec une syntaxe cross-browser, et devient la bibliotheque JavaScript la plus utilisée pendant plus d'une decennie.
Ajax (Asynchronous JavaScript And XML), popularise par Google Maps et Gmail en 2005, change la perception du Web : les pages deviennent dynamiques sans rechargement complet.
Node.js : JavaScript côté serveur (2009)¶
En 2009, Ryan Dahl présenté Node.js à la JSConf — un environnement d'exécution JavaScript base sur le moteur V8 de Chrome, avec une boucle d'événements non-bloquante. C'est une revolution : JavaScript sort du navigateur.
// server.js — Premier serveur HTTP avec Node.js (style original)
import { createServer } from 'node:http';
const server = createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello from Node.js\n');
});
server.listen(3000, () => {
console.log('Server running at http://localhost:3000/');
});
L'écosystème npm (Node Package Manager), lance la même année, devient le plus grand registre de paquets au monde avec plus de 2 millions de paquets en 2024.
TypeScript : la surcouche typee de Microsoft (2012)¶
Microsoft publie TypeScript en octobre 2012. Conçu par Anders Hejlsberg (le créateur de C#), TypeScript ajoute un système de types statiques optionnel au-dessus de JavaScript standard.
TypeScript est un surensemble de JavaScript : tout code JavaScript valide est du TypeScript valide. Le compilateur tsc transpile TypeScript en JavaScript standard.
// types.ts — Exemple de typage TypeScript 5.x
interface User {
id: number;
name: string;
email: string;
role: 'admin' | 'editor' | 'viewer'; // union litterale
}
// Generique avec contrainte
function getById<T extends { id: number }>(items: T[], id: number): T | undefined {
return items.find((item) => item.id === id);
}
// Type utilitaire — Partial rend tous les champs optionnels
type UserUpdate = Partial<Omit<User, 'id'>>;
const update: UserUpdate = { name: 'Alice' }; // valide
TypeScript est adopte massivement : Angular (2016), Vue 3 (2020), puis la plupart des grands projets open-source migrerent vers TypeScript.
Runtimes alternatifs : Deno et Bun¶
Deno (2020)¶
Deno est créé par Ryan Dahl lui-même, en réaction aux regrets exprimes publiquement sur Node.js en 2018. Deno corrige plusieurs problèmes :
- Sécurité par défaut (permissions explicites pour le filesystem, réseau)
- Support natif de TypeScript sans configuration
- Compatibilité native avec les URL d'import (Web standards)
- Outillage intégré : formatter, linter, test runner, bundler
// hello_deno.ts — Deno 2.x avec permissions
const response = await fetch('https://api.github.com/users/denoland');
const data = await response.json();
console.log(`Deno org: ${data.login}, repos: ${data.public_repos}`);
// Execution : deno run --allow-net hello_deno.ts
Bun (2023)¶
Bun est un runtime JavaScript/TypeScript construit en Zig, conçu pour la performance maximale. Il intégré un runtime, un bundler, un package manager et un test runner dans un seul binaire.
| Runtime | Moteur JS | TypeScript natif | Compatibilité npm | Performance (req/s) |
|---|---|---|---|---|
| Node.js | V8 | Via tsc/ts-node | Complète | Référence |
| Deno | V8 | Native | Partielle (npm:) | Similaire Node.js |
| Bun | JavaScriptCore | Native | Complète | 2-4x Node.js |
Node.js reste dominant
Malgre la concurrence, Node.js (v22 LTS en 2024) reste le standard de l'industrie pour la production. Bun est adopte en dev pour sa rapidité d'installation et Deno pour les edge runtimes (Deno Deploy, Cloudflare Workers).
Positionnement actuel¶
JavaScript et TypeScript occupent une position unique en 2024-2025 :
- Navigateur : seul langage natif (via WASM, d'autres langages peuvent cibler le web mais JS reste dominant)
- Serveur : Node.js, Deno, Bun concurrencent Python, Go et Java
- Full-stack : Next.js, Nuxt, SvelteKit unifient front et back en un seul langage
- Mobile : React Native, Expo pour iOS/Android
- Desktop : Electron (VS Code, Figma, Slack), Tauri (Rust + WebView)
- Edge / serverless : Cloudflare Workers, Vercel Edge, Deno Deploy
- Outils de build : Vite, esbuild, Rollup, Webpack (tous en JS/TS)
JavaScript est le langage le plus utilisé au monde selon le sondage Stack Overflow Developer Survey depuis 12 années consecutives (2013-2024). TypeScript figure dans le top 5 des langages les plus apprecies.
Chronologie résumée¶
| Année | Événement |
|---|---|
| 1995 | JavaScript créé par Brendan Eich chez Netscape en 10 jours |
| 1996 | JScript de Microsoft dans IE 3.0 |
| 1997 | Standardisation ECMAScript 1 |
| 1999 | ES3 — base stable pendant 10 ans |
| 2005 | Ajax popularise par Google Maps et Gmail |
| 2006 | jQuery unifie le DOM cross-browser |
| 2009 | Node.js par Ryan Dahl + naissance de npm |
| 2010 | Premiers frameworks MVC : Backbone, AngularJS |
| 2012 | TypeScript 0.8 par Microsoft |
| 2013 | React par Facebook, première popularisation JSX |
| 2014 | Vue.js par Evan You |
| 2015 | ES6/ES2015 — revolution du langage + Babel, Webpack |
| 2016 | Angular 2 (TypeScript first), Yarn comme alternative npm |
| 2017 | async/await dans ES2017 — fin du callback hell |
| 2019 | Deno annonce par Ryan Dahl |
| 2020 | ES2020, optional chaining, Vue 3, Deno 1.0 |
| 2021 | Vite remplacé Webpack pour la rapidité de dev |
| 2022 | Bun beta, Node.js 18 LTS avec Fetch natif |
| 2023 | Bun 1.0 stable, TypeScript 5.0 |
| 2024 | Node.js 22 LTS, ES2024, TypeScript 5.4, Bun 1.1 |