JavaScript est un langage de programmation de scripts principalement employé dans les pages web interactives et à ce titre est une partie essentielle des applications web. Avec les langages HTML et CSS, JavaScript est au cœur des langages utilisés par les développeurs web. Une grande majorité des sites web l'utilisent et la majorité des navigateurs web disposent d'un moteur JavaScript pour l'interpréter.
JavaScript est aussi employé pour les serveurs Web http://wiki.commonjs.org/wiki/CommonJS avec l'utilisation (par exemple) de Node.js ou de Deno.
JavaScript a été créé en 1995 par Brendan Eich et intégré au navigateur web Netscape Navigator 2.0. L'implémentation concurrente de JavaScript par Microsoft dans Internet Explorer, jusqu'à sa version 9, se nommait JScript, tandis que celle d'Adobe Systems se nommait ActionScript. JavaScript a été standardisé sous le nom d'ECMAScript en par Ecma International dans le standard ECMA-262. La version en vigueur de ce standard depuis est la édition.
C'est un langage orienté objet à prototype : les bases du langage et ses principales interfaces sont fournies par des objets. Cependant, à la différence d'un langage orienté objets à classes, les objets de base ne sont pas des instances de classes. En outre, les fonctions sont des objets de première classe. Le langage supporte le paradigme objet, impératif et fonctionnel.
JavaScript est le langage possédant le plus large écosystème grâce à son gestionnaire de dépendances npm, avec plus de deux millions de paquets en .
Histoire
Début Le langage a été créé en dix jours, en mai 1995, pour le compte de la Netscape Communications Corporation par Brendan Eich. Il s'est inspiré de nombreux langages, notamment de Java, en simplifiant la syntaxe pour les débutantsTechVision: Innovators of the Net: Brendan Eich and JavaScript. Brendan Eich a initialement développé un langage de script côté serveur, appelé LiveScript, pour renforcer l'offre commerciale de serveur HTTP. Netscape travaille alors au développement d'une version orientée client de LiveScript.
Quelques jours avant sa sortie, Netscape change le nom de LiveScript pour JavaScript. Sun Microsystems et Netscape étaient partenaires, et la machine virtuelle Java de plus en plus populaire. Ce changement de nom servait les intérêts des deux sociétés. Le Netscape et Sun Microsystems annoncent NETSCAPE AND SUN ANNOUNCE JAVASCRIPT, THE OPEN, CROSS-PLATFORM OBJECT SCRIPTING LANGUAGE FOR ENTERPRISE NETWORKS AND THE INTERNET la sortie de JavaScript, décrit comme un complément à Java, dans un communiqué de presse commun. Cette initiative a contribué à créer auprès du public une certaine confusion entre les deux langages, proches syntaxiquement mais pas du tout dans leurs concepts fondamentaux, et qui perdure encore de nos jours.
En , Netscape met en œuvre le moteur JavaScript dans son navigateur web Netscape Navigator 2.0. Le succès de ce navigateur contribue à l'adoption rapide de JavaScript dans le développement web orienté client. Microsoft réagit alors en développant JScript, qu'il inclut ensuite dans Internet Explorer 3.0 en pour la sortie de son navigateur.
« JavaScript » devient une marque déposée par Sun Microsystems aux États-Unis en .
Marque déposée "JavaScript" est une marque déposée d'Oracle Corporation aux États-Unis. À l'origine, la marque a été attribuée à Sun Microsystems le , puis transférée à Oracle lors de leur acquisition de Sun en 2009.
Standardisation Netscape soumet alors JavaScript à Ecma International pour standardisation.
Version 1 : Naissance du standard ECMA-262 Les travaux débutent en et se terminent en , donnant naissance à la du standard ECMA-262 qui spécifie le langage ECMAScript d'où le fait que le n° ou l'année de la version est souvent précédée par ECMAScript ou en abrégé ES. Le standard est ensuite soumis à l'ISO/CEI et publié en en tant que standard international ISO/CEI 16262.
Version 2 : Homogénéisation avec le standard ISO/CEI 16262 Des changements rédactionnels sont apportés au standard ECMA-262 pour le conformer au standard international ISO/CEI 16262, aboutissant à la du standard ECMA-262 en .
Version 3 : Améliorations et constitution du langage La du standard ECMA-262 introduit :
des expressions rationnelles plus puissantes ; une amélioration de la manipulation des chaînes de caractères ; de nouvelles instructions de contrôle ; une gestion des exceptions avec les instructions try/catch ; le formatage des nombres.
Elle est publiée par Ecma International en puis soumise à l'ISO/CEI qui publie le standard international ISO/CEI 16262:2002 en . Après la publication de la s'ensuit une adoption massive par tous les navigateurs Web.
Version 4 : L'étape inachevée Un travail important est entrepris pour développer la du standard ECMA-262, mais il ne sera pas achevé et cette édition ne verra jamais le jour. Cependant une partie du développement effectué sera intégrée à la .
Version 5 : Désambiguïsation et nouvelles fonctionnalités La du standard ECMA-262 clarifie les ambiguïtés de la et introduit les accesseurs, l'introspection, le contrôle des attributs, des fonctions de manipulation de tableaux supplémentaires, le support du format JSON et un mode strict pour la vérification des erreurs. Elle est publiée par Ecma International en puis soumise à l'ISO/CEI qui apporte des corrections mineures et publie le standard international ISO/CEI 16262:2011 en . L'édition 5.1 du standard ECMA-262 reprenant à l'identique le texte du standard international ISO/CEI 16262:2011 est publiée à la même date.
Version 6 (ES6) - ECMAScript 2015 : Amélioration du support et des fonctionnalités Bien que le développement de la du standard ECMA-262 ait commencé officiellement en 2009, peu avant la publication de la , sa publication en est en réalité l'aboutissement de 15 ans de travail depuis la publication de la en 1999. Le but de cette est d'apporter un meilleur support pour les applications d'envergure, la création de bibliothèques et l'utilisation d'ECMAScript comme cible de compilation pour d'autres langages. Cette édition introduit notamment les modules, les classes, la portée lexicale au niveau des blocs, les itérateurs et les générateurs, les promesses pour la programmation asynchrone, les patrons de déstructuration, l'optimisation des appels terminaux, de nouvelles structures de données (tableaux associatifs, ensembles, tableaux binaires), le support de caractères Unicode supplémentaires dans les chaînes de caractères et les expressions rationnelles et la possibilité d'étendre les structures de données prédéfinies. À partir de cette version, l'intitulé officiel de la version est ECMAScript 2015 (année de parution).
Version 7 - ECMAScript 2016 : une adaptation permanente aux outils du web La du standard ECMA-262 est la première édition issue du nouveau processus de développement ouvert et du rythme de publication annuel adoptés par le comité Ecma TC39. Un document au format texte est créé à partir de la et est mis en ligne sur GitHub comme base de développement pour cette nouvelle édition. Après la correction de milliers de bugs et d'erreurs rédactionnelles ainsi que l'introduction de l'opérateur d'exponentiation et d'une nouvelle méthode pour les prototypes de tableaux, la est publiée en .
Version 8 (ES8) - ECMAScript 2017: Asynchronicité
L'apport majeur concerne les fonctions asynchrones.
On retrouve également :
Le partage de mémoire entre différents fil d'exécution et workers (Shared memory and atomics) Les fonctions Object.values() et Object.entries() qui permettent de faciliter la manipulation des objets.
L'édition actuelle du standard ECMA-262 est la édition publiée en .
Sécurité
JavaScript et la structure DOM des pages HTML/XML ont quelques failles de sécurité. En effet, des scripts malveillants peuvent se cacher dans le code d'une page web et s'exécuter sur l'ordinateur cible de l'utilisateur du Web.
Les problèmes de sécurité étaient souvent présents avec ActiveX, une fonctionnalité du navigateur maintenant obsolète Internet Explorer. Cette fonctionnalité permettait l'exécution de programmes malveillants sur l'ordinateur de la victime, en dehors du navigateur. Aujourd'hui, l'environnement javascript est plus sécurisé.
Les fournisseurs de navigateurs web tentent de réduire ce risque avec deux restrictions :
l'une est de faire exécuter ces scripts dans un espace à part des autres données (sandbox) dans lequel seules des actions relatives au web (mouvements de souris, affichage de pixel, communications) peuvent être exécutées, sans avoir accès au système de fichier principal ; la deuxième est de n'exécuter les scripts que selon les contraintes de same-origin policy : dans cet esprit, un site Web ne doit pas avoir accès aux informations telles que les noms d'utilisateur et mot de passe ou cookies reçus des autres sites visités.
Les vulnérabilités de JavaScript sont bien souvent des brèches d'au moins l'un de ces deux principes.
Certains sous-ensembles du langage Javascript tels que JavaScript—ADsafe ou Secure ECMAScript (SES) fournissent de plus grands niveaux de sécurité, en particulier pour les scripts créés par des tierces parties (notamment les publicités). Caja est un autre logiciel pour inclure et isoler de manière sécurisée du JavaScript et du HTML tierce partie.
La Politique de sécurité du contenu est la principale méthode destinée à assurer que seul un script de confiance est exécuté sur une page Web. Meltdown est une vulnérabilité indépendante de Javascript, qui peut notamment être exploitée en Javascript.
Concepts de programmation Le propos de JavaScript est de manipuler de façon simple des objets, au sens informatique, fournis par une application hôte. Par exemple dans un navigateur web, un script écrit en javascript peut être utilisé pour apporter une touche interactive ou dynamique à un applicatif (page ou site web), qui sans cela serait une page statique figée. Le langage Javascript permet par exemple d'écrire des scripts pour afficher ou cacher un paragraphe, une image ou un popup, selon les interactions de l'utilisateur, ou d'informer le serveur du temps passé à lire une page.
Hello world Il est possible dans un script en langage Javascript, d'afficher le texte hello world sur la console de debug de l’application. Ceci peut être utilisé par des développeurs en phase de mise au point. :
window.console.log('Hello world'); window.console.exp(hello world) // ou global.console.log('Hello world'); window.console.log(hello world)
Dans une application hôte d'un navigateur, console est une des méthodes de l'objet global window. Dans d'autres applications hôtes comme Node.js, l'objet global est global. Les méthodes de l'objet global étant accessibles sans préfixe, window et global sont facultatifs. La syntaxe console.log('Hello world'); aura donc exactement le même résultat en plus d'être compatible sur tous les environnements.
Utilisation Le code JavaScript a besoin d'un objet global pour y rattacher les déclarations (variables et fonctions) avant d'exécuter des instructions. La situation la plus connue est celle de l'objet window obtenu dans le contexte d'une page web. D'autres environnements sont possibles dont celui fourni par Adobe ou l'environnement Node.js (voir plus bas Autres utilisations).
Les principaux domaines d'application de JavaScript sont avant tout la programmation, les activités de programmation de base et tout ce qui est lié à l'informatique.
Dans une page web
Du code JavaScript peut être intégré directement au sein des pages web, pour y être exécuté sur le poste client. C'est alors le navigateur web qui prend en charge l'exécution de ces programmes appelés scripts.