# Qu'est-ce que le JavaScript

# ECMAScript ou JavaScript

JavaScript a été créé en mai 1995, en 10 jours, par Brendan Eich. Il s'est appelé tout d'abord "Mocha", puis "LiveScript" et enfin "JavaScript" après un lobbying de Sun Microsystems (qui lançait à la même époque son langage "Java", qui n'a rien à voir (opens new window) - Sun a été racheté par Oracle en 2010).

C'est un langage standardisé sous le nom ECMA-262 par Ecma International, autrefois ECMA.

JavaScript et ECMAScript sont des noms interchangeables, même si on peut faire une petite nuance en disant que « JavaScript est une implémentation du standard ECMAScript ».

Standardisé pour la première fois en juin 1997 :

  • ECMAScript 1, puis 2 un an après (peu de modif, juste pour être raccord avec ISO)
  • ES3 : Ajout de RegExp, try/catch, do-while, switch...
  • ES4 : Abandonné en 2008 (ActionScript en était une implémentation)
  • ES5 : Déc 2009 (strict mode, getters & setters, Array.prototype.reduce, map, filter)
  • ES5.1 : Juin 2011 (à cause de ISO encore)
  • ES6 : juin 2015 Grosse MAJ
  • ES7 : Toute petite mise à jour, première à sortir avec le nouveau process de sortie des versions
  • Tous les ans une nouvelle version

C'est le comité technique TC39 (Technical Commitee) qui fait évoluer le JavaScript : GAFAM, Mozilla, Opera, Twitter...

On ne peut pas casser le web : les défauts de JS ne peuvent pas être corrigés

# Les outils

Il en existe d'autres :

# Les erreurs silencieuses

En JavaScript, il y aura des erreurs qui ne se verront pas : elles n'apparaîtront pas dans la console du navigateur, et elles ne provoqueront pas l'arrêt de l'exécution du code.

Deux raisons à cela :

  • JavaScript est fait pour être facile à prendre en main
  • La gestion des exceptions n'est venue qu'avec la version 3 (ES3)

# Les buzzwords (pas importants pour les débutants)

JavaScript est un langage

  • de haut niveau (On ne gère pas directement la mémoire) : Du plus bas niveau au plus haut niveau, on trouve :
    1. Le code machine
    2. L'assembleur
    3. Des langages bas niveau comme le C ou le C++
    4. Des langages haut niveau comme le Javascript ou le Python
  • dit "interprété" mais ne l'est pas vraiment, surtout avec les JIT Compiler des env modernes (V8 et spidermonkey)
  • à typage faible dynamique
  • Multi-paradigme : impératif, orienté objet, programmation fonctionnelle
  • à héritage prototypal (on verra plus tard) : un objet est lié à un prototype (ou pas), qui lui-même peut être lié à un prototype, etc.

C'est aussi un langage

  • Monothread : notre code est exécuté dans un seul thread
  • Avec un ramasse-miette ou Garbage collector ("GC") : on ne gère pas nous-mêmes les allocations en mémoire et sa gestion
  • Non-bloquant
  • À boucle d'évènement
  • Compilé JIT (just-in-time) : permet l'optimisation du code de certaines fonctions

Cette dernière liste rassemblent des termes compliqués qu'on n'expliquera pas tout de suite.