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 :
Interpréteur basé sur les spécifications ECMA-262 3e édition.
Liste plus complète
Liste plus complète
Liste plus complète
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.
Le propos de JavaScript est de manipuler de façon simple des objets, au sens informatique, fournis par une application hôte.
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.
// 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
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>
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é.
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
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.
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".