JavaScript - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Versions du langage

Les versions récentes du langage JavaScript ont pour origine les spécifications de la norme ECMA-262 définissant ECMAScript. JavaScript est un sur-ensemble d'ECMAScript développé par la fondation Mozilla et par Adobe lui ajoutant les fonctionnalités suivantes :

Version 1.5

Interpréteur basé sur les spécifications ECMA-262 3e édition.

Version 1.6

  • E4X
  • extension de l'objet Array
  • rapprochement des objets String et Array

Liste plus complète

Version 1.7

  • générateurs (instruction yield)
  • itérateurs
  • définition de tableaux par compréhension (var evens = [i for (i in range(0, 21)) if (i% 2 == 0)];)
  • définition de portée locale (instruction let)
  • assignation déstructurante (renvoi de valeurs multiples : [a,b] = maFonction())

Liste plus complète

Version 1.8

  • extension des fermetures d'expressions
  • extension des expressions génératrices
  • plus d'extras pour les tableaux

Liste plus complète

Version 2.0

Interpréteur basé sur les spécifications du langage ECMAScript Edition 4 (aujourd'hui obsolète et remplacée par ES3.5), un standard rédigé par l'ECMA dans le document ECMA-262 4e édition.

  • Mise en œuvre des spécifications ES4 en collaboration avec Adobe : projet Tamarin.

Concepts

Le propos de JavaScript est de manipuler de façon simple des objets, au sens informatique, fournis par une application hôte.

Hello, world !

Voici l'exemple classique du "Hello world" en Javascript.

      alert("Hello world");      

alert est une méthode de la classe window, mais celle-ci étant récurrente, c'est une des seules classes dont on ne doit pas forcément préciser le nom pour utiliser ses méthodes.

La syntaxe

      window.alert("Hello world");      

aura donc exactement le même résultat.

Particularités du langage

Portée des variables

      // Portée dans une fonction             function testA(nombre)      {          i = nombre; // affecte i globalement          return i * 2;      }             function testB(nombre)      {          var i = nombre; // affecte i localement          return i * 2;      }             var i = 1;      alert(testA(2)); // affiche 4      alert(i);        // affiche 2 car testA a modifié i globalement      alert(testB(3)); // affiche 6      alert(i);        // affiche 2 car testB a modifié i localement             // Portée dans une boucle             var i = 0;             for (i = 1; i < 5; i++) {          // (...)      }      alert(i); // affiche 5, parce que la boucle for a manipulé la variable globale i             for (var i = 1; i < 10; i++) {          // (...)      }      alert(i); // affiche 10, et non 5, parce que la boucle for a en fait redéfini la variable globale i      

Fonctions anonymes

Une fonction anonyme est, comme son nom l'indique, une fonction qui n'a pas de nom.

      //Exemple 1             var maFonction = function(message) {        alert(message);      };             // affiche: ceci est un test      maFonction('ceci est un test');      
            <html>        <body onload="setTimeout( function() {           alert( 'chargement de la page terminé il y a une seconde et demie' )           }, 1500 );">        </body>      </html>      

Fermetures

Les fermetures sont une caractéristique aussi puissante que méconnue du langage. Il s'agit de la possibilité, pour une expression, d'accéder à des variables qui ne sont plus à sa portée.

      //Exemple de fermeture             function ajouteur(nombre) {        function ajoute(valeur) {          return valeur + nombre;        }        return ajoute;      }             var ajoute10 = ajouteur(10);      ajoute10(1); // retourne 11      


Dans l'exemple ci-dessus, la fonction interne ajoute10 a toujours accès au paramètre effectif nombre malgré le fait que l'appel à la fonction ajouteur soit terminé.

Prototypes

Un prototype est un objet JavaScript qui est utilisé lors d'un échec de résolution d'un nom sur son objet parent. Ce mécanisme est un type d'héritage : l'héritage par prototype.

       function MonPrototype() {         this.a = 1;         this.b = function() {           return 'prototype';         };         this.e = 3;       }              function MaClasse() {         this.c = 2;         this.d = function() {           return 'classe';         };         this.e = 4;       }              MaClasse.prototype = new MonPrototype();              monObjet = new MaClasse();              monObjet.a;   // 1       monObjet.b(); // 'prototype'       monObjet.c;   // 2       monObjet.d(); // 'classe'       monObjet.e;   // 4      

Séparation des instructions

En C, chaque instruction se termine par un point-virgule. Cette pratique a fait du point-virgule une obligation dans de nombreux langages inspirés de la syntaxe du C.

JavaScript est plus souple, permettant à une fin de ligne de marquer implicitement la fin d'une instruction. Le but est de faciliter l'usage du langage aux personnes inexpérimentées en programmation informatique. Mais cette souplesse introduit des effets inattendus :

       return         true;      

Le parseur JavaScript comprend cela comme deux instructions :

       return;       true;      

alors que le programmeur pensait plus probablement à la seule instruction :

       return true;      

Les ouvrages de programmation avancés en JavaScript mettent en garde contre les effets inattendus de la déduction automatique de fin d'instruction et conseillent d'écrire un point-virgule à la fin de chaque instruction, ce qui n'empêche pas les surprises lorsqu'on oublie le point-virgule.

E4X

Les versions récentes de la mise en œuvre du langage JavaScript de SpiderMonkey supportent l'E4X. Il s'agit d'un support natif de XML ainsi que d'un support natif d'une syntaxe d'accès aux données XML (sorte de XPath)

Exemple :

      var xml =                                                           

Exemple d'accès aux données :

      xml.popup.menuitem.(@value == 'New').@onclick        

L'exemple ci-dessus récupère la fonction correspondant à l'action "New". Le résultat de l'évaluation est "CreateNewDoc()".

Autre exemple :

      var item = 2;      xml.popup.menuitem[item].@value      

Le résultat de l'évaluation est "Close".

Page générée en 0.056 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales | Partenaire: HD-Numérique
Version anglaise | Version allemande | Version espagnole | Version portugaise