Hello,
Dans l’attente d’experts, je dirais que si tu démarres une application "from scratch", tu as aujourd’hui beaucoup d’outils (babel principalement, potentiellement utilisé avec webpack) qui te permettront de passer outre ces soucis de compatibilité.
Après, il faudrait que tu nous en dises un peu plus.
Si tu veux faire un front tout neuf, aujourd’hui la mode est à la "Single Page Application". Tout rendu côté client (grosso modo, t’as juste un Apache qui sert un fichier html et quelques bundles JS minifiés), la communication avec le serveur se fait à 100% par API.
Si t’es dans ce cas là, la plus grosse phase de l’apprentissage sera le framework utilisé pour écrire ta SPA (Angular, React, Vue, etc.). Beaucoup plus que le langage en lui-même.
Si tu as des pages rendues côté serveur (car tu reprends du code existant) et que tu veux juste bricoler le DOM à coups de Javascript, là je dirais que des ressources comme codeacademy peuvent aider, sinon les bibles de O’Reilly. Le plus important (selon moi) dans le langage en lui-même (sans parler de son interaction avec le DOM) c’est l’héritage par prototype qui m’a pas mal dérouté de prime abord et son corollaire "tout est fonction, même les objets". Pas très naturel quand on vient de l’OO.
Si t’as le choix, je te conseille la solution 1. D’abord parce que c’est vraiment sain cette isolation front / back. Des fois ça rend le truc un peu lourdingue et on se dit que c’était mieux avant, quand on faisait un bête rendu HTML, mais en termes de support c’est assez satisfaisant d’avoir des APIs qu’on peut tester simplement, et une équipe front qui les exploite comme il faut. Et là, j’ai tendance à favoriser React / Redux et le CQRS qui en découle. Encore une fois, t’as l’impression de prendre un bazooka pour écraser une mouche mais le fait d’avoir une UI qui n’est qu’une fonction (pure, ou presque) des données en mémoire, est ultra-satisfaisant à maintenir.
Si t’as pas le choix et que tu dois bidouiller du front qui existe déjà, franchement j’aurais tendance à introduire un truc comme React (Facebook a fait comme ça j’imagine hein, ils ont pas fait une SPA du jour au lendemain) petit à petit. Avec le serveur qui te crache du JSON dans la page directement (au lieu que tu appelles une API pour récupérer les données). C’est pas le Pérou, mais ça se fait bien.
Dans le langage en lui-même, à part aller lire des ressources qui traitent de comment écrire du code le plus fonctionnel possible en JS (sans système de type décent… c’est pas le Pérou non plus…) je vois pas trop quoi te donner comme conseil.
Si tu positionnes un peu mieux le contexte de ce que tu cherches à apprendre concrètement et sur quel type d’app, ça sera vachement plus simple de t’aiguiller je pense.