Существенные грабли, которые очень важно осознать - PHP синхронный, в целом, язык, а JS, в целом, асинхронный. Поэтому тут многие подходы из PHP либо работают плохо, либо не работают вообще.
Чтобы эффективно писать на JS нужно осознать прелести функционального и асинхронного подхода, научиться мыслить коллбеками и не гадить в глобальное пространство.
Еще нужно осознать, что в JS всё (ну или почти всё) есть объект, а, так же, как работает прототипное наследование и замыкания, как работает так называемый Event Loop в совокупности с Call Stack.
Научиться мыслить цепочками вызовов т.к. многие методы в JS поддерживают chaining. Например
const s = '1234567890';
const onlyEvens = s.split('').filter(e => (+e % 2) !== 0).join('');
или даже так
const onlyEvens = '1234567890'.split('').filter(e => (+e % 2) !== 0).join('');
причем во втором случае имеет место быть неявное преобразование строки к объекту, т.к. у самого скаляра строки нет методов.
Вообще мне хорошо мозги на место поставил курс по ES v5
Javascript: Understanding Weird Parts ну или примерно то же самое но на русском у ZORAX. У Кантора тоже все великолепно разложено по полочкам, но он просто жесть какой нудный (имхо).
А потом просто очень много практики, лично я тупо решал всё подряд на кодварс.
А еще чтобы лучше что-то понять, начни объяснять это другим. :) Я так однажды замыкания объяснил кому-то, что аж сам понял... :D
P.S.: Раз ты говоришь что у тебя есть опыт в программировании, возможно тебе будет не актуально, но я все равно скажу, т.к. всегда говорю это - алгоритмы и структуры данных, без них никуда, от слова совсем.