Qu'est-ce que JavaScript, vraiment?


95

Tout cela a commencé lorsque je cherchais un moyen de tester la conformité de ma page Web avec JavaScript, comme le validateur HTML du W3C . Je n'en ai pas encore trouvé. Alors laissez-moi savoir si vous savez de tout ...

  1. J'ai cherché la page JavaScript officielle et trouvé le script ECMA . Ces personnes ont normalisé un langage de script (je n'ai plus envie de l'appeler JavaScript!) Et l'ont appelé ECMA-262 ( Wikipedia ). Leur dernier travail est l'édition 5.1

  2. JavaScript a été développé par Mozilla Corporation et sa dernière version stable est la 1.8.5 ( voir ci- dessous ), basée sur l'édition 5.1 de l'ECMA.

  3. La page Wikipedia liée mentionne des dialectes. Le code JavaScript 1.8.5 de Mozilla est répertorié comme un dialecte avec JScript 9 (IE) et JavaScript ( V8 de Chrome [ Wiki ]), entre autres. Dois-je comprendre que JavaScript 1.8.5 est un dérivé de l'ECMA-262 et que SpiderMonkey [ Wiki ] est un moteur qui l'exécute? Et Chrome a son propre dialecte et le moteur V8 est le programme qui l’exécute?

Avec tous ces dialectes basés sur ECMA-262, ce que je ne peux plus comprendre, c'est "Qu'est-ce que JavaScript "? Existe-t-il des langages de script réellement inter-navigateurs? Les différents responsables de la mise en œuvre se rencontrent-ils pour s’entendre sur la compatibilité croisée des dialectes? Est-ce que cet effort est ECMA?


10
Vous avez oublié de mentionner ActionScript, qui est un dialecte ECMA qui n'a rien à voir avec ce que vous pourriez appeler le langage Javascript.
DaveRandom

4
Pas tellement pour la conformité (comme vous l’avez déjà souligné), mais jslint est très pratique pour vérifier le code.
Certains chatons

2
@MadaraUchiha - Je suis d'accord "utilisez simplement jQuery. Tout ira bien." ça ne va pas aller. C'est pourquoi j'ai commencé à faire des recherches à ce sujet. Mon site bharath.lohray.com fonctionne bien sur Chrome et Firefox et le validateur W3C ne génère aucune erreur non plus, mais il est vraiment nul sur le dernier IE! De plus, bien que j'aime l'idée de personnes sur anybrowser.org/campaign , je ne peux pas être un vrai navigateur!
Seigneur Loh.

7
À propos de votre page, le défilement est très ennuyeux et excessif. Juste IMO. Et le titre "Lord" semble pompeux, même si vous êtes réellement Lord.
NullUserException

11
C'est inutilement flashy. Vous ne voyez pas les messages glisser de haut en bas sur SE. Si ce site Web doit être de qualité professionnelle et que vous souhaitez toujours des transitions, utilisez quelque chose de plus discret, comme un fondu enchaîné.
NullUserException

Réponses:


96

Pratiquement tous les langages matures sont définis par une spécification, et les compilateurs ou interprètes tentent de suivre la norme définie dans cette spécification. Mais ils réussissent très rarement, à moins que la norme ne soit définie par l'auteur du langage.

Vous pouvez trouver en ligne le standard C ++ 2003 , la spécification C # 4 , la spécification Java 7 et bien d’autres. Beaucoup d’entre eux portent des numéros de normalisation ECMA ou ISO. Ce ne sont que des organisations avec lesquelles vous pouvez enregistrer une norme et la rendre plus officielle.

Ruby a toujours fait les choses un peu différemment, avec un ensemble de tests exécutables en tant que spécification . Donc, si vous voulez écrire un interprète et l'appeler Ruby standard, il vous suffit de créer un interprète qui a réussi tous ces tests. Mais même Ruby deviendra éventuellement une spécification plus formelle .

Javascript n'est pas différent, sauf peut-être de la façon dont il a évolué.

Javascript a été créé par Netscape. Ils l'appelaient LiveScript, mais cela ressemblait à Java et ils ont passé un accord avec Sun sur le nom, ce qui a été bénéfique à la fois pour le marketing de Netscape et de Java. Microsoft avait VBScript et (pour des raisons sans doute conjecturées) copiait essentiellement Javascript, mais le nom était la propriété de Sun, alors ils l'appellent joliment JScript.

Mais JScript, tout en étant très similaire à la syntaxe Javascript, a beaucoup utilisé COM - par exemple, IE5 et 6 instancient un objet XMLHttpRequest avec new ActiveXObject("Microsoft.XMLHTTP");.

Ainsi sont nés des "dialectes" parallèles, similaires mais également différents de Javascript. Au fil du temps, divers groupes possédant des navigateurs dont la part de marché était inférieure à celle d'IE ont essayé de normaliser le langage et Microsoft a résisté pendant des années. Jusqu'au V8.

V8 était rapide. Il a établi une nouvelle norme du marché. Tout le reste a l'air pauvre.

Et, dans diverses affaires antitrust contre Microsoft, IE perdait des parts de marché. Du coup, Microsoft avait intérêt à prendre en charge la normalisation. Nous n'en sommes pas encore là, mais c'est sur la bonne voie.

Pendant ce temps, V8 était open source, ce qui a permis aux gens de commencer à penser de nouvelles utilisations pour un analyseur rapide Javascript, comme Node.JS .

Mais pour revenir à votre question: qu'est-ce que le Javascript? C'est le nom commun (et original) d'ECMAScript, spécification d'un langage prototype utilisé couramment, mais pas exclusivement, pour la navigation et la manipulation du modèle d'objet de domaine dans un navigateur.

ECMA-262 n’est que la définition standard, tout comme ECMA-334 est la définition standard de C #. ECMAScript était le seul nom sur lequel toutes les parties intéressées pouvaient s’accorder, en 1999, au moment de la rédaction de la ECMA-262.


7
Si je pouvais relire votre réponse plus d'une fois, je l'aurais fait :-) Cela aide à préciser certaines choses. L'analogie avec les compilateurs C rend la situation un peu compréhensible :-) Sauf que JavaScript n'est pas compilé en binaire et que les utilisateurs finaux voient des scripts non / quasi-fonctionnels. Alors, dois-je comprendre que je ne peux pas construire une page à une norme et espérer la faire fonctionner de la même façon sur tous les navigateurs? (étant pourtant le mot clé).
Seigneur Loh.

1
@ LordLoh. C'est correct. Mais vous pouvez autoriser des bibliothèques telles que jQuery et Prototype à résumer les différences pour vous.
pdr

Cet article et la recherche ont commencé lorsque l'animation jQuery ne fonctionnait pas sur IE9 et que j'avais menti à l'idée de la campagne anybrowser.org et espérais pouvoir respecter un standard. HTML5 / CSS3 / JS. Le JS a fini comme le virus dans mon capot.
Seigneur Loh.

1
@ LordLoh. Je ne serais pas si sûr que ce soit la faute de jQuery. Un simple coup d’œil suffit pour afficher les problèmes rencontrés avec votre code HTML (guillemets manquants, par exemple). Lorsque vous réduisez ainsi votre code Javascript, vous risquez d’obtenir des résultats étranges si vous n’êtes pas très précis. Je me souviens d’un problème où j’avais manqué un point-virgule il ya bien longtemps et qui n’a échoué qu’après compression dans l’un des principaux navigateurs. jQuery est assez stable et devrait bien fonctionner avec IE9.
pdr

5
@ LordLoh. console.log est votre problème. Cela ne fonctionne que si vous ouvrez la barre d'outils de développement (et créez ainsi un objet "console").
pdr

23

Javascript est une implémentation couramment utilisée de ECMAScript. C'est une situation très similaire à celle de la famille Scheme . Dans Scheme, vous avez une spécification hautement formalisée. La version actuelle est R6RS, bien que R5RS soit de loin le standard le plus couramment implémenté à ce jour. Les implémentations sont plus dispersées que celles d'ECMAScript en raison de l'âge et de la philosophie générale de Scheme.

Le langage Javascript est devenu courant, en grande partie à cause de la croissance explosive de la part de marché de Firefox de Mozilla et de Google Chrome. Netscape Navigator, qui s’était initialement développé dans le navigateur Mozilla puis dans Firefox (et Iceweasel si vous exécutiez avec la foule Scheme), a trouvé un pied d’avant avec Netscape Navigator.

Maintenant, voici où ça devient un peu risqué. La plupart des performances de Javascript proviennent de l'analyseur et du moteur qui l'exécute. C’est là que les différences réelles entre les navigateurs deviennent apparentes. Spidermonkey utilise Javascript différemment de la version 8. Le Javascript a toujours des points durs comme l’absence d’une bibliothèque entièrement commune, bien que cela soit en train d’être travaillé

Donc, si Javascript était en C ++, alors ECMAScript serait le C ++ 11, UNIX et G ++ étant les plus proches du "standard", tandis que C ++ pour .NET et Objective C ++ sont plus éloignés que ce que fait ActionScript à partir de ECMAScript

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.