LA raison principale, c'est la portabilité.
À peu près tous les appareils numériques comprennent le JavaScript, ce qui fait qu'on peut programmer :
- des sites web, qui fonctionneront dans tous les navigateurs modernes, sans ajouter d'extension (contrairement à Flash ou SilverLight)
- des applications natives, pour téléphone modernes, ou pour ordinateur quel que soit l'OS (Windows, Mac OS, Linux, Android, iOS,...)
- des serveurs web (le gros monstre qui gère les données d'un site internet)
- des applications pour navigateurs (comme les bloqueurs de pub, les outils de gestion de mot de passe,...)
- des drones, ou autres systèmes embarqués, ou des objets connectés...
- probablement la plupart des choses que l'on n'utilise pas encore aujourd'hui (frigos auto-approvisionnés, soucoupes volantes, cyborgs...)
Ça veut dire qu'un développeur qui connait le JavaScript, peut à peu près tout programmer.
Ça veut aussi dire qu'on pourra réutiliser pas mal de choses, si on veut adapter un projet sur une autre plateforme. Gros bémol ici, il y a beaucoup de paradigmes qui changent l'interface, rien que le bouton "Retour" sur Android qui n'est pas présent sur iPhone, ça demande des adaptations, alors transformer un site web en application Apple Watch, c'est pas non plus immédiat :)
Deuxième point, c'est assez orienté "asynchrone, temps réel, push, multithread, non-bloquant, socket, bla-bla-bla"...
En général un site web, quand tu accède à une page, ça va faire une demande au serveur, qui va utiliser "une machine" (un thread) exprès pour fabriquer ta page.
En JavaScript, tu peux ouvrir une connexion entre ton ordinateur et le serveur, et ton ordinateur peut "attendre" que le serveur décide de lui envoyer des infos.
C'est aussi une seule et même "machine" qui peut gérer toutes les connexions (ce qui peut poser d'autres problèmes par ailleurs).
Et enfin, c'est "pas trop mal" comme language, d'un point de vue structurel.
J'ai eu du mal à être convaincu, mais au final si on s'y met sérieusement, on arrive à faire des choses bien. Le vrai problème c'est que la plupart des développeurs ont une expérience très basique du JavaScript, qui suffit à faire 95% de ce qu'on leur demande, mais que si on n'approfondit pas, on se retrouve avec un "plat de spaghetti".
C'est aussi un langage qui évolue beaucoup, les outils naissent et meurent assez rapidement, et donc c'est difficile de faire des choix, puisqu'on ne sait pas vers qui on s'engage.
Pour ceux qui s'y connaissent et qui veulent approfondir : jstherightway.org/