'>

langage de programmation JavaScript

JavaScript (JS) est un langage de programmation informatique interprété. [5] Il a été initialement mis en œuvre dans le cadre des navigateurs Web afin que les scripts côté client peuvent-ils interagir avec l'utilisateur, de contrôler le navigateur, communiquer de façon asynchrone, et de modifier le contenu du document qui a été affiché [5]. Plus récemment, cependant, il est devenu commun dans les deux le développement de jeux et la création d'applications de bureau.

JavaScript est un langage de script basé sur un prototype avec le typage dynamique et dispose de fonctions de première classe. Sa syntaxe a été influencé par le langage C. JavaScript copie beaucoup de noms et conventions de nommage de Java, mais les deux langues sont non liée et très différents sémantique. Les principes clés de la conception au sein de JavaScript sont prises à partir des langues Soi-même et Scheme programmation. [6] C'est un langage multi-paradigme, en soutenant, [7] [1] [8] styles de programmation impérative et fonctionnelle orientée objet.

L'utilisation de JavaScript dans des applications en dehors de pages Web, par exemple, dans les documents PDF, les navigateurs spécifiques au site et widgets de bureau-est également importante. Récent et plus rapide des machines virtuelles et des cadres construits sur eux (notamment Node.js) JavaScript ont également augmenté la popularité de JavaScript pour les applications Web côté serveur.

JavaScript a été officialisée dans la norme du langage ECMAScript et est principalement utilisé dans le cadre d'un navigateur Web (JavaScript côté client). Cela permet un accès programmatique aux objets informatiques dans un environnement hôte.

Histoire
Naissance à Netscape

JavaScript a été initialement développé par Brendan Eich. Luttant avec Microsoft via Internet, Netscape considéré comme leur solution client-serveur comme un système d'exploitation distribué, exécutant une version portable de Java de Sun Microsystems. Parce que Java était un concurrent de C + + et s'adresse à des programmeurs professionnels, Netscape voulait aussi un langage interprété léger qui compléterait Java en faisant appel à des programmeurs non professionnels, comme Visual Basic de Microsoft (voir Javascript et Java). [9]

Développé sous le nom de Moka, LiveScript était le nom officiel de la langue lors de sa première expédié dans les versions bêta de Netscape Navigator 2.0 en Septembre 1995, mais il a été rebaptisé JavaScript [10] quand il a été déployée dans les Netscape Browser Version 2.0b3. [ 11]

Le changement de nom de LiveScript à peu près coïncidé avec JavaScript Netscape ajouter le support pour la technologie Java dans son navigateur Web Netscape Navigator. Le choix final du nom a provoqué la confusion en donnant l'impression que la langue était un spin-off du langage de programmation Java, et le choix a été caractérisée par beaucoup comme un stratagème de marketing par Netscape pour donner JavaScript le cachet de ce qui était alors le chaud nouveau langage de programmation web. [12] [13]
JavaScript côté serveur

Netscape a introduit une implémentation du langage de script côté serveur (SSJS) avec Netscape Enterprise Server, d'abord publié en Décembre 1994 (peu après la libération JavaScript pour les navigateurs). [14] [15] Depuis le milieu des années 2000, il ya eu une prolifération des implémentations de JavaScript côté serveur. Node.js est un récent exemple remarquable de JavaScript côté serveur utilisé dans les applications du monde réel [16]. [17]
Adoption par Microsoft

JavaScript très rapidement acquis un large succès comme un langage de script côté client pour les pages web. Microsoft a introduit le support JavaScript dans son navigateur web, Internet Explorer, dans la version 3.0, sorti en Août 1996. [18] [pas dans la citation donnée] Le serveur web de Microsoft, Internet Information Server, introduit le support des scripts côté serveur en JavaScript avec la version 3.0 (1996). Microsoft a commencé à promouvoir les scripts web en utilisant le terme générique Dynamic HTML.

JavaScript l'implémentation de Microsoft a été rebaptisé JScript pour éviter les problèmes de marques. JScript ajouté de nouvelles méthodes de date de fixer les méthodes Y2K problématiques en JavaScript, qui étaient fondées sur la classe java.util.Date de Java.
Normalisation

En Novembre 1996, le Netscape a annoncé qu'elle avait soumis javascript Ecma International pour être considérée comme une norme de l'industrie, et les travaux ultérieurs abouti à la version standardisée appelée ECMAScript. En Juin 1997, le Ecma International a publié la première édition de la spécification ECMA-262. Un an plus tard, en Juin 1998, les quelques modifications ont été apportées pour l'adapter à la norme ISO/IEC-16262, et la deuxième édition a été publiée. La troisième édition de la norme ECMA-262 (publiée le Décembre 1999) est la version la plupart des navigateurs utilisent actuellement. [19]

Quatrième édition de la norme ECMAScript n'a pas été libéré et n'existe pas. Cinquième édition de la norme ECMAScript a été publié en Décembre 2009. L'édition actuelle de la norme ECMAScript 5.1 et il est sorti en Juin 2011. [20]
Développements ultérieurs

JavaScript est devenu l'un des langages de programmation les plus populaires sur le web. Au départ, cependant, de nombreux programmeurs professionnels dénigré la langue parce que son public cible comprenait les auteurs Web et autres «amateurs», entre autres raisons. [21] L'avènement de l'Ajax revient JavaScript pour la scène et a apporté plus d'attention de la programmation professionnelle. Le résultat a été une prolifération de cadres et des bibliothèques complètes et meilleures pratiques de programmation JavaScript, et l'utilisation accrue de JavaScript dehors des navigateurs web, comme on le voit par la multiplication des plates-formes de JavaScript côté serveur.

En Janvier 2009, le projet CommonJS a été fondée dans le but de spécifier une bibliothèque standard commun principalement pour le développement JavaScript dehors du navigateur. [22]
Trademark

Aujourd'hui, "JavaScript" est une marque déposée d'Oracle Corporation. [23] Elle est utilisée sous licence d'une technologie inventée et mise en œuvre par Netscape Communications et entités actuelles, telles que la Fondation Mozilla. [24]
Traits

Les caractéristiques suivantes sont communes à toutes les implémentations ECMAScript conformes, sauf mention contraire expresse.
Impératif et structurée

JavaScript prend en charge une grande partie de la syntaxe de programmation structuré à partir de C (par exemple, si les états, tandis que les boucles, les états de commutation, etc.) Une exception partielle est portée: C de style bloc de cadrage n'est pas supporté, mais plutôt, JavaScript dispose de la fonction de cadrage. JavaScript 1.7, cependant, soutient bloc de cadrage avec le mot-clé let. Comme C, JavaScript établit une distinction entre les expressions et déclarations. Une différence syntaxique de C est l'insertion automatique des points-virgules, dans lequel les points-virgules qui se terminent déclarations peuvent être omises. [25]
Dynamique

typage dynamique
    Comme dans la plupart des langages de script, les types sont associés à des valeurs, et non pas avec des variables. Par exemple, une variable x pourraient être liés à un numéro, puis plus tard réattribués à une autre chaîne. JavaScript prend en charge diverses façons de tester le type d'un objet, y compris le typage canard. [26]
objet sur la base
    JavaScript est presque entièrement basée sur les objets. Objets JavaScript sont des tableaux associatifs, augmentées des prototypes (voir ci-dessous). noms de propriétés de l'objet sont les clés de chaîne: obj.x = 10 et obj ['x'] = 10 sont équivalentes, la notation par point étant du sucre syntaxique. Propriétés et leurs valeurs peuvent être ajoutées, modifiées ou supprimées au moment de l'exécution. La plupart des propriétés d'un objet (et ceux de sa chaîne d'héritage de prototype) peuvent être énumérés à l'aide d'une boucle for ... in. JavaScript a un petit nombre d'objets intégrés tels que la fonction et de la date.
l'évaluation de l'exécution
    JavaScript inclut une fonction eval qui peut exécuter des instructions fournies sous forme de chaînes au moment de l'exécution.

Fonctionnel

fonctions de première classe
    Les fonctions sont de première classe, ils sont des objets eux-mêmes. Comme tels, ils ont des propriétés et des méthodes, telles que. Call () et. Bind (). [27] Une fonction imbriquée est une fonction définie dans une autre fonction. Il est créé à chaque fois que la fonction externe est appelé. En outre, chaque fonction créée forme une fermeture lexicale: le champ lexical de la fonction externe, y compris les constantes, les variables locales et les valeurs d'argument, devient partie intégrante de l'état interne de chaque objet fonction interne, même après l'exécution de la fonction externe conclut-il. [28]

Basé sur un prototype

prototypes
    JavaScript utilise prototypes où de nombreux autres langages orientés objet utilisent des classes pour l'héritage. [29] Il est possible de simuler de nombreuses fonctionnalités en classe avec des prototypes en JavaScript. [30]
fonctions que les constructeurs d'objets
    Fonctions doubles constructeurs d'objets avec leur rôle typique. Précéder un appel de fonction avec la nouvelle va créer une instance d'un prototype, l'héritage de propriétés et les méthodes du constructeur (y compris les propriétés du prototype de l'objet). [31] ECMAScript 5 propose la méthode de Object.create, permettant la création explicite d'une instance sans automatiquement héritant du prototype de l'objet (environnements plus âgés peuvent affecter le prototype à null). [32] la propriété prototype du constructeur détermine l'objet utilisé pour le prototype interne du nouvel objet. De nouvelles méthodes peuvent être ajoutés en modifiant le prototype de l'objet utilisé comme un constructeur. Constructeurs intégrés de JavaScript, comme un tableau ou un objet, ont également des prototypes qui peuvent être modifiés. Bien que cela soit possible, il est généralement considéré comme une mauvaise pratique de modifier le prototype de l'objet que la plupart des objets en Javascript hériteront méthodes et propriétés du prototype de l'objet et ne peuvent pas attendre ceux qui doivent être modifiés. [33]
fonctions que les méthodes
    Contrairement à de nombreux langages orientés objet, il n'ya pas de distinction entre une définition de fonction et une définition de méthode. Au contraire, la distinction se produit pendant le fonctionnement appel, une fonction peut être appelée en tant que méthode. Quand une fonction est appelée en tant que méthode d'un objet, ce mot-clé locales de la fonction est liée à l'objet de cette invocation.

Divers

environnement d'exécution
    JavaScript repose généralement sur un environnement d'exécution (par exemple dans un navigateur Web) pour fournir des objets et méthodes par lesquels les scripts peuvent interagir avec «le monde extérieur». En effet, il s'appuie sur l'environnement à fournir la possibilité d'inclure / scripts d'importation (par exemple <script> éléments HTML). (Ce n'est pas une fonctionnalité de langage en soi, mais il est courant dans la plupart des implémentations de JavaScript.)
fonctions variadiques
    Un nombre indéfini de paramètres peuvent être transmis à une fonction. La fonction peut y accéder via les paramètres formels et aussi à travers l'objet arguments local. Variadiques fonctions peuvent également être créés en utilisant la méthode apply.
tableaux et d'objets littéraux
    Comme beaucoup de langages de scripts, tableaux et objets (tableaux associatifs dans d'autres langues) peuvent chacun être créé avec une syntaxe de raccourci succinct. En fait, ces littéraux forment la base du format de données JSON.
expressions régulières
    JavaScript prend également en charge les expressions régulières d'une manière similaire à Perl, qui fournissent une syntaxe concise et puissante pour la manipulation de texte qui est plus sophistiqué que le haut-fonctions de chaîne. [34]

Extensions spécifiques au fournisseur

JavaScript est géré officiellement par la Fondation Mozilla, et les nouvelles fonctionnalités du langage sont ajoutés périodiquement. Toutefois, seuls certains moteurs JavaScript soutenir ces nouvelles fonctionnalités:

    getter de la propriété et fonctions de définition (également soutenu par WebKit, Opera, [35] ActionScript, et Rhino) [36]
    clauses catch conditionnelles
    iterator protocole adopté de Python
    superficielle générateurs-coroutines également adopté de Python
    compréhensions de tableau et expressions électrogènes ont également adopté de Python
    portée de bloc appropriée via le mot-clé let
    tableau et objet déstructuration (forme limitée de pattern matching)
    expressions de fonction concis (function (args) expr)
    ECMAScript pour XML (E4X), une extension qui ajoute le support XML natif d'ECMAScript

La syntaxe et la sémantique
Article principal: la syntaxe JavaScript

En 2011, la dernière version du langage JavaScript est 1.8.5. Il est un sur-ensemble de ECMAScript (ECMA-262) édition 3. Extensions du langage, y compris partielle ECMAScript pour XML (E4X) (ECMA-357) support et les fonctionnalités expérimentales considérées pour inclusion dans les futures éditions d'ECMAScript, sont documentées ici. [37]
Des exemples simples

Variables dans JavaScript peuvent être définies en utilisant le mot-clé var: [38]

var x; / / définit la variable x, même si aucune valeur n'est attribuée par défaut
var y = 2; / / définit la variable y et affecte la valeur de 2 à elle

Notez les commentaires dans l'exemple ci-dessus, qui tous deux ont été précédées par deux barres obliques.

Il n'y a aucune fonctionnalité intégrée I / O en JavaScript; l'environnement d'exécution prévoit que. La spécification ECMAScript dans l'édition 5.1 Mentions: [39]

    ... En effet, il n'existe pas de dispositions dans ce cahier des charges pour l'entrée de données ou de sortie des résultats calculés externes.

Cependant, la plupart des environnements d'exécution ont un objet console [40] qui peut être utilisé pour imprimer le résultat. Voici un programme mondial Bonjour minimaliste:

console.log ("Bonjour tout le monde!");

Une fonction récursive simple:

fonction factorielle (n) {
    si (n === 0) {
        return 1;
    }
    retourner n * factorielle (n - 1);
}

Fonction anonyme (ou lambda) syntaxe et exemple de fermeture:

var displayClosure = function () {
    var count = 0;
    fonction de retour () {
        retour + + compter;
    };
}
var inc = displayClosure ();
inc (); / / renvoie 1
inc (); / / renvoie 2
inc (); / / retourne 3

Variadiques fonction démonstration (arguments est une variable spéciale) [41].

var somme = function () {
    var i, x = 0;
    for (i = 0; i <arguments.length; + + i) {
        x + = arguments [i];
    }
    return x;
}
sum (1, 2, 3); / / retourne 6

Expressions de fonction immédiatement invoquées par les fonctions permettent de passer autour des variables en vertu de leurs propres fermetures.

var v;
v = 1;
var = getValue (function (v) {
  function () {return retour v;};
}) (V);

v = 2;

getValue (); / / 1

Exemple plus avancé

Cet exemple de code affiche différentes fonctions de JavaScript.

/ * Trouve le plus petit commun multiple (PPCM) de deux nombres * /
LCMCalculator fonction (x, y) {/ / la fonction constructeur
    var checkInt = function (x) {/ / la fonction intérieure
        si (x 1%! == 0) {
            throw new TypeError (x + "n'est pas un entier"); / / lever une exception
        }
        return x;
    };
    this.a = checkInt (x)
    / / ^ Virgules sont facultatifs
    this.b = checkInt (y);
}
/ / Le prototype d'instances d'objets créé par un constructeur est
/ / La propriété "prototype" de ce constructeur.
LCMCalculator.prototype = {/ / littéral d'objet
    constructeur: LCMCalculator, / / ​​quand la réaffectation d'un prototype, définissez la propriété du constructeur appropriée
    GCD: function () {/ / méthode qui calcule le plus grand commun diviseur
        / / Algorithme d'Euclide:
        var a = Math.abs (this.a), b = Math.abs (this.b), t;
        si (a <b) {
            / / Variables d'échange
            t = b;
            b = a;
            a = t;
        }
        while (b! == 0) {
            t = b;
            b = a% b;
            a = t;
        }
        / / Seulement besoin de calculer GCD fois, donc "redéfinir" cette méthode.
        / / (En fait pas redéfinition-elle est définie sur l'instance elle-même,
        / / Afin que this.gcd se réfère à cette "redéfinition" au lieu de LCMCalculator.prototype.gcd.)
        / / En outre, 'GCD' === "GCD", cette ['GCD'] === this.gcd
        cette ['GCD'] = function () {
            retourner un;
        };
        retourner un;
    },
    / Noms de propriété / d'objets peuvent être spécifiés par des chaînes délimitées par des guillemets (") ou simple (').
    "LCM": function () {
        / / Les noms de variables n'entrent pas en collision avec les propriétés des objets, par exemple, | LCM | n'est pas | this.lcm |.
        / / Pas de l'aide | this.a * this.b | Pour éviter les problèmes de précision FP
        var = LCM this.a / this.gcd () * this.b;
        / / Seulement besoin de calculer LCM fois, donc "redéfinir" cette méthode.
        this.lcm = function () {
            retourner LCM;
        };
        retourner LCM;
    },
    toString: function () {
        retourner "LCMCalculator: a =" + this.a + ", b =" + this.b;
    }
};

/ / Définition de la fonction de sortie générique; cette application ne fonctionne que pour les navigateurs Web
la sortie de fonction (x) {
    document.body.appendChild (document.createTextNode (x));
    document.body.appendChild (document.createElement ('br'));
}

/ / Note: la map () et foreach Array () sont définis dans JavaScript 1.6.
/ / Ils sont utilisés ici pour démontrer la nature fonctionnelle inhérente JavaScript.
[[25, 55], [21, 56], [22, 58], [28, 56]]. Carte (function (paire) {/ / littéral de tableau + fonction de mappage
    return new LCMCalculator (paire [0], la paire [1]);
}). Trier (function (a, b) {/ / tri avec cette fonction comparative
    retourner a.lcm () - b.lcm ();
}). ForEach (function (obj) {
    sortie (obj + ", PGCD =" + obj.gcd () + ", LCM =" + obj.lcm ());
});

La sortie suivante doit être affiché dans la fenêtre du navigateur.

LCMCalculator: a = 28, b = 56, PGCD = 28, LCM = 56
LCMCalculator: a = 21, b = 56, PGCD = 7, LCM = 168
LCMCalculator: a = 25, b = 55, PGCD = 5, LCM = 275
LCMCalculator: a = 22, b = 58, PGCD = 2, LCM = 638

Utilisez dans les pages Web
Voir aussi: moteur JavaScript et Ajax (programmation)

L'utilisation la plus courante de JavaScript consiste à écrire des fonctions qui sont incorporés dans ou incluses à partir de pages HTML et qui interagissent avec le Document Object Model (DOM) de la page. Quelques exemples simples de cette utilisation sont les suivantes:

    Chargement d'un nouveau contenu de la page ou de soumettre des données au serveur via AJAX sans recharger la page (par exemple, un réseau social peut permettre à l'utilisateur d'afficher des mises à jour de statut sans quitter la page)
    Animation des éléments de la page, les fondus entrant et sortant, les redimensionner, les déplacer, etc
    Le contenu interactif, par exemple des jeux et la lecture audio et vidéo
    Validation des valeurs d'entrée d'un formulaire Web pour s'assurer qu'ils sont acceptables avant d'être soumis au serveur.
    Transmettre des informations sur les habitudes de lecture de l'utilisateur et activités de navigation vers divers sites Web. pages Web font souvent cela pour l'analyse Web, le suivi des annonces, la personnalisation ou à d'autres fins. [42]

Parce que le code JavaScript peut s'exécuter localement dans le navigateur d'un utilisateur (plutôt que sur un serveur distant), le navigateur peut répondre aux actions des utilisateurs rapidement, ce qui rend une application plus réactive. En outre, le code JavaScript peut détecter les actions des utilisateurs qui HTML seul ne peut pas, comme chaque frappe au clavier. Des applications telles que Gmail profiter de ceci: une grande partie de la logique de l'interface utilisateur est écrit en JavaScript et JavaScript dépêches demandes d'informations (telles que le contenu d'un message e-mail) sur le serveur. La tendance générale de la programmation Ajax exploite même cette force.

Un moteur JavaScript (aussi connu comme interpréteur JavaScript ou mise en œuvre JavaScript) est un interprète qui interprète le code source JavaScript et exécute le script en conséquence. Le premier moteur JavaScript a été créé par Brendan Eich à Netscape Communications Corporation, pour le navigateur Web Netscape Navigator. Le moteur, le nom de code SpiderMonkey, est implémenté en C. Il a depuis été mis à jour (en JavaScript 1.5) pour se conformer à la norme ECMA-262 Edition 3. Le moteur de Rhino, créée principalement par Norris Boyd (anciennement Netscape, maintenant chez Google) est une implémentation JavaScript en Java. Rhino, comme SpiderMonkey, est ECMA-262 Edition 3 conforme.

Un navigateur Web est de loin le milieu d'accueil la plus courante pour JavaScript. Les navigateurs Web créent généralement des «objets d'accueil" pour représenter le Document Object Model (DOM) en JavaScript. Le serveur web est un autre milieu d'accueil commune. Un serveur JavaScript serait typiquement exposer des objets d'accueil représentant requête HTTP et objets d'intervention, un programme JavaScript qui pourrait alors interroger et manipuler pour générer dynamiquement des pages Web.

Parce que JavaScript est la seule langue que le navigateur appui de l'action le plus populaire pour, il est devenu une langue cible pour de nombreux cadres dans d'autres langues, même si JavaScript n'a jamais été destiné à être un tel langage. [43] Malgré les limites de performance inhérente à sa nature dynamique, l'accélération des moteurs JavaScript a fait de la langue une cible de compilation étonnamment faisable.
Exemple de script

Voici un exemple minimal d'une page Web contenant des normes conformes JavaScript (en utilisant la syntaxe HTML 5) et dans les DOM:

<! DOCTYPE html>

<meta charset="utf-8">
<title> Minimal Exemple </ title>

<h1 id="header"> C'est JavaScript </ h1>

<script>
    document.body.appendChild (document.createTextNode ('Bonjour le monde!'));

    var h1 = document.getElementById ('header'); / / contient une référence à l'étiquette de <h1>
    h1 = document.getElementsByTagName («H1») [0]; / / accès à un même élément <h1>
</ Script>

<noscript> Votre navigateur navigateur ne supporte pas JavaScript ou il est désactivé. </ noscript>

considérations de compatibilité
Article principal: l'interopérabilité du Web

Parce que JavaScript s'exécutant dans les environnements très variés, une partie importante de tests et le débogage est de tester et vérifier que le JavaScript fonctionne sur plusieurs navigateurs.

Les interfaces DOM pour manipuler les pages Web ne font pas partie de la norme ECMAScript, ou de JavaScript lui-même. Officiellement, les interfaces DOM sont définies par un effort de standardisation séparée par le W3C, en pratique, les implémentations du navigateur diffèrent des normes et de l'autre, et tous les navigateurs d'exécuter JavaScript.

Pour faire face à ces différences, les auteurs JavaScript peuvent tenter d'écrire du code conforme aux normes qui sera également exécutée correctement par la plupart des navigateurs, à défaut, ils peuvent écrire du code qui vérifie la présence de certaines fonctions du navigateur et se comporte différemment si elles ne sont pas disponibles [44]. Dans certains cas, les deux navigateurs peuvent aussi implémenter une fonctionnalité, mais avec un comportement différent, et les auteurs peuvent trouver pratique pour détecter quel navigateur est en marche et changer le comportement de leur script pour correspondre. [45] [46] Les programmeurs peuvent également utiliser bibliothèques ou des outils qui prennent différences entre les navigateurs en compte.

En outre, les scripts peuvent ne pas fonctionner pour certains utilisateurs. Par exemple, un utilisateur peut:

    utiliser un navigateur ancien ou rare avec le soutien DOM incomplet ou inhabituel,
    utiliser un navigateur PDA ou téléphone mobile qui ne peut pas exécuter JavaScript
    ont exécution JavaScript désactivé par mesure de sécurité,
    utiliser un navigateur discours en raison, par exemple, d'un handicap visuel.

Pour soutenir ces utilisateurs, les auteurs web peuvent essayer de créer des pages qui dégradent gracieusement sur les agents utilisateurs (navigateurs) qui ne supportent pas le JavaScript de la page. En particulier, la page doit rester utilisable mais sans les fonctionnalités supplémentaires que le JavaScript aurait ajouté. Une approche alternative que beaucoup trouvent préférable est d'abord de créer du contenu en utilisant les technologies de base qui fonctionnent dans tous les navigateurs, puis d'améliorer le contenu pour les utilisateurs qui ont JavaScript activé. Ceci est connu comme l'amélioration progressive.
Accessibilité
Article principal: l'accessibilité du Web

En supposant que l'utilisateur n'a pas désactivé son exécution côté client web JavaScript doit être rédigé afin d'améliorer l'expérience des visiteurs ayant une déficience visuelle ou physique, et ne devrait certainement éviter de refuser des informations à ces visiteurs. [47]

Les lecteurs d'écran, utilisés par les aveugles et les malvoyants, peuvent être JavaScript-aware et peuvent donc accéder et lire la page DOM après le script a changé il. Le code HTML doit être aussi concis, navigable et sémantiquement riche que possible si les scripts ont exécuté ou non. JavaScript doit pas être totalement dépendants des événements propres à la souris de manière à refuser les avantages pour les utilisateurs qui soit ne peuvent pas utiliser une souris ou qui choisissent de privilégier le clavier pour une raison quelconque. De même, bien que des hyperliens et des formulaires Web peuvent être parcourus et exploités à partir du clavier, accessible JavaScript doit pas exiger des événements de clavier non plus. Il ya des événements indépendants du périphérique comme onfocus et onchange qui sont préférables dans la plupart des cas [47].

JavaScript doit pas être utilisé d'une manière qui prête à confusion ou désorientation à tous les utilisateurs Web. Par exemple, en utilisant un script pour modifier ou désactiver la fonctionnalité normale du navigateur, comme en changeant le le bouton retour ou le travail d'événement d'actualisation moyen, est généralement préférable d'éviter. De même, le déclenchement des événements que l'utilisateur peut ne pas être au courant diminue le sentiment de contrôle de l'utilisateur, faire des changements scriptés inopinées sur le contenu de la page. [48]

Souvent, le processus de fabrication d'une page web complexe aussi accessible que possible devient un problème non trivial où les questions deviennent des questions de débat et d'opinion, et où des compromis sont nécessaires à la fin. Toutefois, les agents utilisateurs et les technologies d'assistance sont en constante évolution et de nouvelles lignes directrices et les informations pertinentes sont continuellement publiées sur le web. [47]
Sécurité
Voir aussi: La sécurité du navigateur

JavaScript et le DOM offrent le potentiel pour les auteurs malveillants afin de livrer son exécution pour fonctionner sur un ordinateur client via le web. auteurs de navigateurs contiennent ce risque en utilisant deux restrictions. Tout d'abord, scripts s'exécutent dans un bac à sable dans lequel ils peuvent seulement effectuer des actions liées à l'Internet, pas des tâches de programmation à usage général, comme la création de fichiers. Deuxièmement, les scripts sont contraints par la politique de même origine: les scripts d'un site web n'ont pas accès à des informations telles que noms d'utilisateur, mots de passe ou les cookies envoyés à un autre site. La plupart des bogues de sécurité JavaScript liées à des manquements soit de la politique de même origine ou le bac à sable.

Il ya des sous-ensembles de général JavaScript - AdSafe, Secure ECMA Script (SES) - qui fournissent plus haut niveau de sécurité, en particulier sur le code créé par des tiers (tels que les publicités) [49] [50].

Contenu de la politique de sécurité est la principale méthode destinée à assurer que seul le code de confiance est exécuté sur une page web.
Voir aussi: contenu politique de sécurité
Vulnérabilités cross-site
Principaux articles: Cross-Site Scripting et Cross-Site Request contrefaçon

Un problème de sécurité commune JavaScript est liée cross-site scripting ou XSS, une violation de la politique de la même origine. Vulnérabilités XSS se produisent quand un attaquant est capable de provoquer un site Web cible, comme un site de banque en ligne, afin d'inclure un script malveillant dans la page web présentée à la victime. Le script de cet exemple peut alors accéder à l'application bancaire avec les privilèges de la victime, ce qui pourrait divulguer des informations secrètes ou transférer de l'argent sans l'autorisation de la victime. Une solution vulnérabilités XSS consiste à utiliser HTML échapper à chaque fois que l'affichage des données non fiables.

Certains navigateurs comprennent une protection partielle contre les attaques XSS réfléchie, dans laquelle l'attaquant fournit une URL dont script malveillant. Cependant, même les utilisateurs de ces navigateurs sont vulnérables à d'autres attaques XSS, comme celles où le code malveillant est stocké dans une base de données. Seulement conception correcte des applications Web côté serveur peut empêcher complètement XSS.

Vulnérabilités XSS peuvent également se produire en raison d'erreurs de mise en œuvre par les auteurs du navigateur. [51]

Une autre vulnérabilité cross-site est Cross-Site Request falsification ou CSRF. En CSRF, code sur le site des tours d'un attaquant de navigateur de la victime en prenant des mesures que l'utilisateur n'a pas l'intention à un site cible (comme le transfert d'argent à une banque). Cela fonctionne parce que, si le site cible ne repose que sur les cookies pour authentifier les demandes, les demandes initiées par le code sur le site de l'attaquant porteront les mêmes identifiants de connexion légitimes demandes initiées par l'utilisateur. En général, la solution à CSRF est d'exiger une valeur d'authentification dans un champ de formulaire caché, et pas seulement dans les cookies, pour authentifier toute demande qui pourrait avoir des effets durables. Vérification de l'en-tête HTTP referrer peut également aider.

"JavaScript détournement" est un type d'attaque CSRF dans lequel une balise <script> sur le site de l'attaquant exploite une page sur le site de la victime qui renvoie des informations privées telles que JSON ou JavaScript. Les solutions possibles sont:

    nécessitant un jeton d'authentification dans le POST et GET paramètres pour toute réponse qui renvoie des informations privées
    utilisant POST et GET jamais pour les requêtes qui retournent des informations privées

Une confiance mal placée dans le client

Les développeurs d'applications client-serveur doivent reconnaître que les clients non fiables peuvent être sous le contrôle de pirates. Ainsi aucun secret embarqué dans JavaScript pourrait être extraite par un adversaire déterminé, et l'auteur de la demande ne peut pas supposer que sa JavaScript fonctionne comme prévu, ou pas du tout. Quelques implications:

    auteurs de sites Web ne peuvent pas dissimuler parfaitement comment fonctionne leur JavaScript, car le code est envoyé au client, et le code maquillé peut être désossé.
    La validation du formulaire JavaScript seulement offre une commodité pour les utilisateurs, et non la sécurité. Si un site vérifie que l'utilisateur a accepté de ses conditions de service, ou des filtres des caractères non valides sur les domaines qui ne doit contenir que des chiffres, il doit le faire sur le serveur, et non pas uniquement le client.
    Les scripts peuvent être désactivées de façon sélective, de sorte JavaScript peut pas être invoqué pour empêcher les opérations telles que "enregistrer l'image". [52]
    Il est extrêmement mauvaise pratique pour intégrer des informations sensibles telles que mots de passe en JavaScript, car il peut être extrait par un attaquant.

Navigateur et le plugin erreurs de codage

JavaScript fournit une interface pour un large éventail de fonctionnalités de navigation, dont certaines peuvent avoir des défauts tels que des débordements de tampon. Ces failles peuvent permettre à un attaquant d'écrire des scripts qui irait tout code qu'ils souhaitent sur le système de l'utilisateur. Ce code n'est pas par quelque moyen que limité à une autre application JavaScript. Par exemple, un dépassement de la mémoire tampon exploit peut permettre à un attaquant d'accéder à l'API du système d'exploitation avec les privilèges du superutilisateur.

Ces défauts ont affecté les principaux navigateurs, y compris Firefox, [53] Internet Explorer, [54] et Safari. [55]

Plugins, comme les lecteurs vidéo, Adobe Flash, et le large éventail de contrôles ActiveX activés par défaut dans Microsoft Internet Explorer, peuvent aussi avoir des failles exploitables via JavaScript, et ces failles ont été exploitées dans le passé. [56] [57]

Dans Windows Vista, Microsoft a tenté de contenir les risques de bugs comme les dépassements de tampon en lançant le processus d'Internet Explorer avec des privilèges limités. [58] Google Chrome limite même les convertisseurs de pages dans son propre "sandbox".
Erreurs d'implémentation Sandbox

Les navigateurs web sont capables d'exécuter JavaScript à l'extérieur du bac à sable, avec les privilèges nécessaires pour, par exemple, créer ou supprimer des fichiers. Bien sûr, de tels privilèges ne sont pas censées être accordées au code du web.

Incorrectement octroi de privilèges aux JavaScript à partir du Web a joué un rôle dans la vulnérabilité à la fois dans Internet Explorer [59] et Firefox. [60] Dans Windows XP Service Pack 2, Microsoft a rétrogradé les privilèges de JScript dans Internet Explorer. [61]

Microsoft Windows permet aux fichiers source JavaScript sur le disque dur d'un ordinateur pour être lancés comme des programmes non-bac à sable à usage général. Cela rend le JavaScript (comme VBScript) un vecteur viable théoriquement pour un cheval de Troie, bien que JavaScript chevaux de Troie sont rares dans la pratique. [62] (voir Windows Script Host).
Utilise l'extérieur de pages Web

En plus de navigateurs Web et les serveurs, interpréteurs JavaScript sont noyés dans un certain nombre d'outils. Chacune de ces applications fournit son propre modèle d'objet qui permet d'accéder à l'environnement hôte, avec le reste essentiellement le même dans chaque application langage noyau JavaScript.
Langage de script incorporé

    Chrome Les extensions de Google, les extensions d'Opera, Safari 5 extensions d'Apple Dashboard, les Widgets d'Apple, les gadgets de Microsoft, Yahoo! Widgets, Gadgets Google Desktop, et Serence KlipFolio sont implémentées en utilisant JavaScript.
    Acrobat d'Adobe et Adobe Reader support JavaScript dans les fichiers PDF. [63]
    Outils dans la Creative Suite d'Adobe, notamment Photoshop, Illustrator, Dreamweaver, InDesign et, permettent de script par JavaScript.
    Bureautique OpenOffice.org suite d'applications permet d'activer JavaScript comme l'un de ses langages de script.
    Le logiciel de traitement du signal de musique interactive Max / MSP publié par Cycling '74, offre un modèle JavaScript de son environnement pour une utilisation par les développeurs. Il permet un contrôle beaucoup plus précis que le modèle de programmation GUI-centric défaut.
    ECMAScript a été incluse dans la norme VRML97 pour les scripts nœuds VRML fichiers de description de scène.
    Sphere est un programme informatique open-source et multi-plateforme conçue principalement pour faire des jeux de rôle qui utilisent JavaScript comme langage de script.
    Le cadre Re-Animator open-source permet de développer des jeux 2D sprite à base de l'aide de JavaScript et XML. [64]
    Le moteur de jeu Unity prend en charge JavaScript modifié pour utiliser le script (en plus de C # et Boo) via Mono [65].
    DX Studio (moteur 3D) utilise l'implémentation de JavaScript SpiderMonkey pour le jeu et la simulation logique. [66]
    Maxwell Render (logiciel de rendu) fournit un moteur de script basé norme ECMA pour l'automatisation des tâches. [67]
    Google Apps Script dans Google Spreadsheets et Google Sites permet aux utilisateurs de créer des formules personnalisées, automatiser des tâches répétitives et également interagir avec les autres produits Google tels que Gmail [68].
    Beaucoup de clients IRC, comme ChatZilla ou XChat, utilisent JavaScript pour leurs capacités de script. [69] [70]
    Produits SpinetiX lecteurs multimédias et l'utilisation des logiciels SpiderMonkey (le moteur JavaScript) pour permettre aux scripts via JavaScript dans les fichiers SVG pour créer des projets d'affichage numérique. [71]
    Nuage Parti monde virtuel utilise une version limitée de JavaScript / ECMAScript 5 comme dans le monde langage de script. [72]

Moteur de script

    La technologie Active Scripting Microsoft prend en charge JScript comme langage de script. [73]
    Le langage de programmation Java, en version SE 6 (JDK 1.6), a présenté le paquet javax.script, notamment par l'application JavaScript basé sur Mozilla Rhino. Ainsi, les applications Java peuvent accueillir des scripts qui accèdent à des variables et des objets de l'application, un peu comme les navigateurs Web son hôte qui accèdent Document Object Model du navigateur (DOM) pour une page Web. [74] [75]
    Le Qt C + + Toolkit comprend un module QtScript d'interpréter JavaScript, analogue au paquet javax.script de Java. [76]
    JSDB (JavaScript for Databases) est un shell open-source JavaScript pour Windows, Mac OS X, Linux et Unix, qui s'étend le moteur JavaScript de Mozilla avec fichiers, bases de données, e-mail et réseau d'objets. [77]
    jslibs est un interpréteur JavaScript open-source pour Windows et Linux qui s'étend le moteur JavaScript de Mozilla. Il a la capacité d'appeler des fonctions dans les bibliothèques couramment utilisés comme NSPR, SQLite, libtomcrypt, OpenGL, OpenAL, et librsvg. [78]
    JavaScript OSA de Late Night Software (aka JavaScript pour OSA, ou JSOSA) est une alternative freeware à AppleScript pour Mac OS X. Il est basé sur le 1,5 implémentation JavaScript de Mozilla, avec l'ajout d'un objet MacOS pour l'interaction avec le système d'exploitation et troisième les applications du parti [79].

Application Platform

    ActionScript, le langage de programmation utilisé dans Adobe Flash, est une autre application de la norme ECMAScript.
    Adobe Integrated Runtime est un runtime JavaScript qui permet aux développeurs de créer des applications de bureau.
    Environnement de script inter-applications AutoShell CA, Inc. est construit sur JavaScript / SpiderMonkey avec préprocesseur comme des extensions de définitions de commandes et des cours personnalisés pour différentes tâches liées au système comme fichier i / o, le système opération invocation de commandement et de redirection et de script COM.
    GNOME Shell, le Shell pour l'environnement de bureau GNOME 3. [80] En 2013 GNOME Developer Experience Hackfest, il a été décidé de pousser JavaScript comme langage de programmation GNOME par défaut [81]
    La plate-forme Mozilla, qui sous-tend Firefox, Thunderbird, et quelques autres navigateurs Web, utilise JavaScript pour implémenter l'interface utilisateur graphique (GUI) de ses différents produits.
    myNFC est un framework basé sur JavaScript qui permet aux développeurs de créer des applications pour les téléphones intelligents. [82]
    Langage de balisage de Qt Quick (QML) utilise JavaScript pour la logique de l'application, et la syntaxe déclarative est de type JavaScript. QML est disponible depuis Qt 4.7.
    Tapuscrit est un langage de programmation basé sur JavaScript qui ajoute le support des annotations de type optionnelles et certaines autres extensions de langage tels que les classes, interfaces et modules. Un TS-script compile en JavaScript plaine et peut être exécuté à n'importe quel hôte JS soutenir ECMAScript 3 ou plus. Le compilateur est lui-même écrit en caractères dactylographiés.
    Ubuntu tactile prend en charge les applications HTML5 et fournit également l'API JavaScript pour sa facilité d'utilisation unifiée comme les menus HUD, les indicateurs de messagerie et les notifications indigènes.
    webOS utilise l'implémentation de JavaScript WebKit dans son SDK pour permettre aux développeurs de créer des applications autonomes uniquement en JavaScript.
    WinJS fournit la bibliothèque de Windows spéciale pour la fonctionnalité JavaScript dans Windows 8 qui permet le développement d'applications de style moderne (anciennement Metro style) en HTML5 et JavaScript.

Outils de développement

Dans JavaScript, l'accès à un débogueur devient précieuse lors de l'élaboration de grands programmes, non-triviales. Car il peut y avoir des différences d'implémentation entre les différents navigateurs (notamment dans le Document Object Model), il est utile d'avoir accès à un débogueur pour chacun des navigateurs qu'un des objectifs de l'application Web. [83]

débogueurs de scripts sont disponibles pour Internet Explorer, Firefox, Safari, Google Chrome et Opera. [84]

Trois débogueurs sont disponibles pour Internet Explorer: Microsoft Visual Studio est le plus riche des trois, suivie de près par Microsoft Script Editor (un composant de Microsoft Office), [85] et, enfin, le débogueur de script Microsoft gratuit qui est beaucoup plus simple que l'autre deux. La libre Microsoft Visual Web Developer Express fournit une version limitée de la fonctionnalité de débogage JavaScript dans Microsoft Visual Studio. Internet Explorer a inclus des outils de développement depuis la version 8 (accessible en appuyant sur la touche F12).

applications Web dans Firefox peut être débogué en utilisant le Firebug add-on, ou le plus débogueur Venkman. Firefox dispose également d'un simple intégré dans la console d'erreur, qui enregistre et évalue JavaScript. Il enregistre également les erreurs CSS et les avertissements.

Opera inclut un ensemble d'outils appelés Dragonfly. [86]

L'inspecteur web de WebKit inclut un débogueur JavaScript [87] utilisé dans Safari, avec une version modifiée de Google Chrome.

Certaines aides débogage sont eux-mêmes écrit en JavaScript et construit pour fonctionner sur le Web. Un exemple est le JSLint du programme, développé par Douglas Crockford qui a beaucoup écrit sur la langue. JSLint scanne le code JavaScript pour la conformité à un ensemble de normes et de lignes directrices.
Historique des versions
Voir aussi: ECMAScript # dialectes et ECMAScript # Version correspondance

Le tableau suivant est basé sur une histoire compilation post sur le forum, [88] blog de l'auteur jQuery, [89] et JScript informations concernant la version de la page Web de Microsoft. [90]
Version Date de sortie équivalente à Netscape
Navigateur Mozilla
Firefox Internet
Explorateur Opera Safari Google
Chrome
1,0 Mars 1996 2,0 3,0
1.1 Août 1996 3.0
1.2 Juin 1997 de 4,0 à 4,05 3 [91]
1.3 Octobre 1998 ECMA-262 2ème édition 1ère + 4,06 4.7x 4.0 5 [92]
1.4 Netscape
Server 6
1.5 Novembre 2000 ECMA-262 3ème édition 6.0 1.0 5.5 (JScript 5.5),
6 (JScript 5.6),
7 (JScript 5.7),
8 (JScript 5,8) 7,0 3.0-5 1.0-10.0.666
1.6 Novembre 2005 1.5 + ensemble + extras tableau et cordes génériques + 1,5 E4X
1.7 Octobre 2006 1.6 + générateurs Python + itérateurs + let 2.0
1.8 juin 2008 1.7 + expressions de générateur + fermetures d'expression 3.0 11.50
1.8.1 1.8 + support JSON natif + mises à jour mineures 3.5
1.8.2 22 Juin, 2009 1.8.1 + mises à jour mineures 3.6
1.8.5 27 Juillet, 2010 1.8.2 + ECMAScript 5 conformité 4 9 11.60
1.8.6 17
Légende:
Ancienne version
Dernière version
Langues et fonctions connexes

JSON ou JavaScript Object Notation, est un format d'échange de données à usage général qui est défini comme un sous-ensemble de la syntaxe littérale de JavaScript.

jQuery et Prototype sont des bibliothèques de JavaScript courants destinés à simplifier côté client DOM-orienté script HTML.

Mozilla prennent actuellement en charge LiveConnect, une fonction qui permet d'activer JavaScript et Java communiquent entre eux sur le web. Cependant, le soutien spécifique à Mozilla pour LiveConnect est prévu pour être éliminées dans l'avenir en faveur de la transmission de la manipulation de LiveConnect via NPAPI à la Java 1.6 + plug-in (pas encore supporté sur Mac comme sur Mars 2010). [93 ] outils d'inspection plupart des navigateurs, tels que Firebug de Firefox, notamment interpréteurs JavaScript qui peut agir sur le DOM du visible page.
Utiliser comme un langage intermédiaire

Comme JavaScript est le langage côté client le plus largement soutenue qui peut fonctionner dans un navigateur Web, il est devenu un langage intermédiaire pour les autres langues de cible. Cela a inclus les deux langues et les ports de langues existantes nouvellement créées. Il s'agit notamment de:

    Objective-J, un sur-ensemble de JavaScript qui compile à la norme JavaScript. Il ajoute héritage traditionnel et Smalltalk / Objective-C Style envoi dynamique et en tapant pseudo-statique en option à activer JavaScript.
    Processing.js, un port JavaScript de traitement, un langage de programmation conçu pour écrire des visualisations, des images et du contenu interactif. Il permet aux navigateurs web d'afficher des animations, des applications visuelles, des jeux et d'autres contenus riches graphique sans la nécessité d'une applet Java ou plugin Flash.
    CoffeeScript, une autre syntaxe pour JavaScript destiné à être plus concis et plus lisible et en ajoutant des fonctionnalités telles compréhensions de tableau (également disponible sur JavaScript depuis la version 1.7 [94]) et pattern matching. Comme Objective-J, il compile en JavaScript. Ruby et Python ont été cités comme influence sur la syntaxe CoffeeScript.
    Google Web Toolkit traduit un sous-ensemble de Java JavaScript.
    Scala, un langage de programmation orienté objet et fonctionnel avec un compilateur expérimental pour Javascript
    Quby, un propriétaire de sable encadré langage Ruby-comme par PlayMyCode utilisé pour construire des jeux par navigateur.
    Ometa, un langage fonctionnel, avec des pattern matching.
    Phype, un compilateur open-source PHP à JavaScript.
    TIScript, un sur-ensemble de JavaScript qui ajoute des classes, espaces de noms et les expressions lambda.
    ClojureScript, un Clojure au compilateur JavaScript qui est compatible avec le mode de compilation avancé de la fermeture compilateur Google optimisation.
    Parenscript, une bibliothèque Common Lisp qui peut se traduire en JavaScript fois le code Common Lisp bien circonscrite et JavaScript rendues S-expressions «inclus» dans Common Lisp code source.
    Py2JS, un sous-ensemble de Python
    Pyjamas, un port de Google Web Toolkit pour Python (traduit un sous-ensemble de Python pour JavaScript)
    Dart, un langage de programmation open-source développé par Google, peut être compilé pour JavaScript ainsi que d'exécuter sur Dart VM.
    Whalesong, un compilateur Raquette à JavaScript.
    Emscripten, LLVM-backend pour le portage bibliothèques natives à JavaScript
    Fantom un langage de programmation qui s'exécute sur la JVM. NET et JavaScript.
    Police de caractère, un langage de programmation libre et open-source développé par Microsoft. Il est un sur-ensemble de JavaScript, et ajoute essentiellement le typage statique en option et la programmation orientée objet basée sur les classes de la langue.
    Haxe, un langage open-source multiplateforme haut niveau programmation et un compilateur qui peut produire des applications et le code source pour de nombreuses plates-formes différentes, y compris JavaScript.

JavaScript et Java

Une idée fausse commune est que JavaScript est similaire ou étroitement liés à Java. Il est vrai que les deux ont une syntaxe de type C, le langage C étant le plus immédiat leur langue ancêtre commun. Ils sont à la fois orientée objet et généralement sandbox (lorsqu'il est utilisé dans un navigateur). En outre, JavaScript a été conçu avec la syntaxe de Java et la bibliothèque standard à l'esprit. En particulier, tous les mots clés Java ont été réservés dans l'original JavaScript, bibliothèque standard de JavaScript suit les conventions de nommage de Java et de mathématiques de JavaScript et des objets de ce jour sont fondées sur les classes de Java 1.0. [18]

Toutefois, les similitudes s'arrêtent là. Java est à typage statique, la frappe de JavaScript est dynamique (c'est à dire une variable peut contenir un objet de tout type et ne peut pas être limité). Java est chargée de code compilé; JavaScript est chargé en tant que code source lisible. Les objets de Java sont basés sur les classes; JavaScript de sont basé sur un prototype. JavaScript dispose également de nombreuses fonctions de programmation fonctionnels basés sur le langage Scheme.
Published By Drupal french Study