JavaScript

Définition

JavaScript (souvent abrégé JS) est un langage de programmation interprété et multi-paradigme de haut niveau, principalement utilisé pour le développement web. Créé par Brendan Eich chez Netscape en 1995, c’est le langage dominant du web, s’exécutant dans tous les principaux navigateurs et de plus en plus sur les serveurs.

Détails clés

  • Paradigme : Multi-paradigme (orienté objet, fonctionnel, impératif, événementiel)
  • Licence : Standard ECMA-262 ; les implémentations varient (V8 : BSD, SpiderMonkey : MPL)
  • Runtime : V8 (Chrome/Node.js), SpiderMonkey (Firefox), JavaScriptCore (Safari), JavaScriptEngine (autres)
  • Créateur : Brendan Eich (créé en 10 jours)
  • Normalisation : ECMAScript (ECMA-262) — cycle de publication annuel depuis 2015

Fonctionnalités du langage

  • Typage dynamique : Types résolus au moment de l’exécution
  • Fonctions de premier ordre : Fonctions en tant qu’objets, fermetures, fonctions d’ordre supérieur
  • POO par prototypes : Pas de classes dans la spécification originale (ES6 a ajouté la syntaxe de classes)
  • Event loop : Modèle d’E/S asynchrone et non-bloquant
  • Garbage collection : Gestion automatique de la mémoire (mark-and-sweep)
  • Typage faible : La coercition de types peut entraîner des bugs subtils

Évolution d’ECMAScript

|| Version | Année | Fonctionnalités clés | ||———|——|————-| || ES5 | 2009 | Mode strict, JSON, méthodes de tableau | || ES6/ES2015 | 2015 | Classes, arrow-functions, template-literals, destructuring, promises | || ES2016 | 2016 | Array.prototype.includes, exponentiation-operator | || ES2017 | 2017 | async/await, Object.values, shared-memory | || ES2018 | 2018 | async-iterators, rest-spread, promise-finally | || ES2019 | 2019 | flatMap, optional-catch, string-trim | || ES2020 | 2020 | nullish-coalescing, optional-chaining, BigInt, import-maps | || ES2021 | 2021 | logical-assignment, string-replaceAll | || ES2022 | 2022 | class-fields, top-level-await, Array.at | || ES2023 | 2023 | Array.groupBy, findLast | || ES2024 | 2024 | pipeline-operator, records-tuples |

Moteurs et runtimes principaux

|| Moteur | Implémentation | Licence | ||——–|—————|———| || V8 | Chrome, Chromium, Node.js | BSD 3-Clause | || SpiderMonkey | Firefox | MPL 2.0 | || JavaScriptCore | Safari, WebKit | LGPL / BSD | || JavaScriptCore (JSC) | iOS, macOS | LGPL / BSD |

Côté serveur (Node.js)

|| Gestionnaire de packages | Description | ||—————–|————-| || npm | Node Package Manager — plus grand registre de packages | || yarn | Build plus rapides et déterministes (Facebook) | || pnpm | Packages liés en dur, économes en disque | || Bun | Runtime plus récent avec bundler et runner de tests intégrés |

Cas d’utilisation

  • Développement web côté client (manipulation du DOM, gestion d’événements)
  • Applications côté serveur (Node.js, Express, NestJS)
  • Applications mobiles (React Native)
  • Applications desktop (Electron)
  • Outils CLI (packages npm)
  • machine-learning (TensorFlow.js)

Comparaison avec les langages apparentés