JavaScript

JavaScript est un langage de programmation de scripts principalement employé dans les pages web interactives mais aussi pour les serveurs2 avec l’utilisation (par exemple) de Node.js3. C’est un langage orienté objet à prototype, c’est-à-dire que les bases du langage et ses principales interfaces sont fournies par des objets qui ne sont pas des instances de classes, mais qui sont chacun équipés de constructeurs permettant de créer leurs propriétés, et notamment une propriété de prototypage qui permet de créer des objets héritiers personnalisés. 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 environ 500 000 paquets en août 20174.

JavaScript a été créé en 1995 par Brendan Eich. Il a été standardisé sous le nom d’ECMAScript en juin 1997 par Ecma International dans le standard ECMA-262. Le standard ECMA-262 en est actuellement à sa 8e édition. JavaScript n’est depuis qu’une implémentation d’ECMAScript, celle mise en œuvre par la fondation Mozilla. L’implémentation d’ECMAScript par Microsoft (dans Internet Explorer jusqu’à sa version 9) se nomme JScript, tandis que celle d’Adobe Systems se nomme ActionScript.

Avec les technologies HTML et CSS, JavaScript est parfois considéré comme l’une des technologies cœur du World Wide Web5. Le langage JavaScript permet des pages web interactives, et à ce titre est une partie essentielle des applications web. Une grande majorité des sites web l’utilisent6, et la majorité des navigateurs web disposent d’un moteur JavaScript dédié pour l’interpréter, indépendamment des considérations de sécurité qui peuvent se poser le cas échéant.

Le langage a été créé en dix jours en mai 1995 pour le compte de la Netscape Communications Corporation par Brendan Eich, qui s’est inspiré de nombreux langages, notamment de Java mais en simplifiant la syntaxe pour les débutants7.

Brendan Eich a initialement développé un langage de script côté serveur, appelé LiveScript, pour renforcer l’offre commerciale de serveur HTTP de Mosaic Communications Corporation. La sortie de LiveScript intervient à l’époque où le NCSA force Mosaic Communications Corporation à changer de nom pour devenir Netscape Communications Corporation.

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.

En décembre 1995, Sun et Netscape annoncent8 la sortie de JavaScript. En mars 1996, 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 août 1996 pour la sortie de son navigateur.

JavaScript est décrit comme un complément à Java dans un communiqué de presse8 commun de Netscape et Sun Microsystems, daté du 4 décembre 1995. 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 jours9.

« JavaScript » devient une marque déposée par Oracle aux États-Unis en mai 199710,11.

Netscape soumet alors JavaScript à Ecma International pour standardisation. Les travaux débutent en novembre 1996 et se terminent en juin 1997, donnant naissance à la 1re édition du standard ECMA-262 qui spécifie le langage ECMAScript. Le standard est ensuite soumis à l’ISO/CEI et publié en avril 1998 en tant que standard international ISO/CEI 16262.

Des changements rédactionnels sont apportées au standard ECMA-262 pour le conformer au standard international ISO/CEI 16262, aboutissant à la 2e édition du standard ECMA-262 en juin 1998.

La 3e édition 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 et le formatage des nombres. Elle est publiée par Ecma International en décembre 1999 puis soumise à l’ISO/CEI qui publie le standard international ISO/CEI 16262:2002 en juin 2002. Après la publication de la 3e édition s’ensuit une adoption massive par tous les navigateurs Web.

Un travail conséquent est entrepris pour développer la 4e édition 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 6e édition.

La 5e édition du standard ECMA-262 clarifie les ambiguïtés de la 3e édition 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 décembre 2009 puis soumise à l’ISO/CEI qui apporte des corrections mineures et publie le standard international ISO/CEI 16262:2011 en juin 2011. 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.

Bien que le développement de la 6e édition du standard ECMA-262 ait commencé officiellement en 2009, peu avant la publication de la 5e édition, sa publication en juin 2015 est en réalité l’aboutissement de 15 ans de travail depuis la publication de la 3e édition en 1999. Le but de cette 6e édition 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 destructuration, 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.

La 7e édition 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 6e édition 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 7e édition est publiée en juin 2016.

L’édition actuelle du standard ECMA-262 est la 10e édition, publiée en juin 201912.

Sécurité[modifier | modifier le code]

JavaScript et la structure DOM des pages HTML/XML fournissent un potentiel accès à des auteurs mal intentionnés de livrer par le web des scripts qui s’exécutent sur l’ordinateur cible de l’utilisateur du Web. Les fournisseurs de navigateurs 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. Une seconde 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)13,14Caja 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.