
Professional JavaScript for Web Developers, 2nd Edition, provides a developer-level introduction along with the more advanced and useful features of JavaScript. Starting at the beginning, the book explores how JavaScript originated and evolved into what it is today. A detailed discussion of the components that make up a JavaScript implementation follows, with specific focus on standards such as ECMAScript and the Document Object Model (DOM). The differences in JavaScript implementations used in different popular web browsers are also discussed. Building on that base, the book moves on to cover basic concepts of JavaScript including its version of object-oriented programming, inheritance, and its use in various markup languages such as HTML. An in-depth examination of events and event handling is followed by an exploration of browser detection techniques and a guide to using regular expressions in JavaScript. The book then takes all this knowledge and applies it to creating dynamic user interfaces. The last part of the book is focused on advanced topics, including performance/memory optimization, best practices, and a look at where JavaScript is going in the future.
It's a book about Javascript that assumes you've written software in other languages before. I believe the book uses Java/C#, Python, and maybe a couple other languages as reference points.
It describes language behavior and constructs that may be new to you, and details where the familiar may differ from what you'd expect. For instance, the section on `var` and how function scoping (and hoisting) differ from block scoping was quite detailed, but I don't remember it spending a lot of time on what it meant to declare a variable or why scoping rules matter.
If the book had a beginner focus I might have seen the section on declaring variables, skimmed to see the `var` keyword, and skipped the rest. Then I'd have written a bunch of code that would bite me later, because why would you ever assume function scoping when coming from another language?
It's unfortunate that it's so difficult to find books with either an intermediate to advanced focus, or a focus on switching languages, as I think both are sorely needed in the current programming ecosystem.
[0]: https://www.wiley.com/en-us/Professional+JavaScript+for+Web+...
[1]: https://www.amazon.com/Professional-JavaScript-Developers-Ma...
Professional JavaScript for Web Developers was the text I used to deep dive on the language in 2012, and it was fantastic. The chapters that dealt with prototype inheritance, scope chains, and execution context provided for a very solid command of the language at the time. Nicholas C. Zakas is an excellent author.
Understanding ECMAScript 6: The Definitive Guide for JavaScript Developers 1st Edition was also written by Zakas, although I have not read it. Unfortunately since it was released in 2016, it likely lacks some of the later revisions to ECMAScript that have been ratified since.
Honorable mention includes Secrets of the JavaScript Ninja, but it's also an old book. Despite its campy name, it provided some of the best visual explanations of advanced JavaScript topics I've ever seen. Granted, I just read a few of the chapters.
I recently had to skill up and take the leap from my pre-ES6 knowledge into the bleeding edge, and the way I did that was to just read MDN (Mozilla Developer Network) pages where necessary, maybe the occasional blog post assuming it seemed of sufficient caliber.
Of course, the hardcore way to deep dive is simply read the latest ECMA spec directly, but I wouldn't recommend that route for where you're at right now unless you're really curious about a particular mechanic.
Based on a cursory search and taking a gander at its index, Eloquent JavaScript, 3rd Edition: A Modern Introduction to Programming (December 4, 2018) looks pretty good.
Some other commenters are saying the "learn as you go" approach is sufficient, and it certainly is initially, but at some point I highly recommend deep diving into how more advanced features of the language work so that you have a solid command of the language.
Either way, best of luck and happy learning!
Professional Javascript for Web Developers[1] is a favorite of mine, because it doesn't waste time teaching you to program and teaching you the language. Instead it points out things that will surprise you if you come from C-like languages, and things you need to watch out for.
Now, since I effectively learned to program in C and later C#/Java, ___ for node developers isn't what I'm after, especially if it spends a bunch of time talking about static typing or fixed size arrays and such. But if you're going the opposite way as I did, learning the high level and transitioning to the low level, something like that could be very useful indeed.
[1]: https://www.amazon.com/Professional-JavaScript-Developers-Ni...
"Functional JavaScript: Introducing Functional Programming with Underscore.js"
"Professional JavaScript for Web Developers"
[edited to add more books]