In the days of Ajax, a good understanding of JavaScript is crucial in really understanding how Ajax works. This book by John Resig (developer of JQuery) has written an intermediate - advanced book on JavaScript teaching the reader topics such as object-oriented practices, creating reusable code, DOM, events along with many useable examples. With all the fancy JavaScript libraries out now, it is good to have a book that teaches the reader how to create your own libraries or at least how many of those are create with proper object-based development.
Until Ajax came along (which brought about JS libraries), knowing how to create objects and reusable code wasn't really explained much in books. This book talks about it in the first chapter, where John shows how to create objects via Prototyping, function overloading and using the Object constructor. John also talks about closures, scope, property and method creation and namespacing. All of these topics are found in other languages (C++, Java, VB.NET), but were not really used much in JavaScript until recently. John also covers in detail inheritance (classical and prototypal) and goes through other libraries (YUI, Dojo, Prototype, etc) and how they are created. A very thorough explanation on objects and creating reusable code in JavaScript. Actually this is one of the few books that have covered these topics in such detail. Many other books just skimmed the surface with these topics that made it hard for the newbie to understand.
What current JavaScript book could be published without talking about the DOM. Every book nowadays talks about this topic since everything out on the web seems to use it in on form or another. This book goes in to great detail talking about the DOM with a complete explanation of the basics of what it is, when it can be accessed (waiting for the DOM to load), finding elements on a page, standard DOM methods and 3rd party functions that have been used for years to fill in the gaps of DOM methods that are not available. For instance: addEvent, getElementsByClassName, CSSQuery, JQuery and others. Without a solid foundation of the DOM, many of the cool things that are done on the web today could not be done.
Another important and often not talked about topic is event registration. Chapter 6 of this book goes into the various ways and element can respond to an event. From event phases, (capturing and bubbling), traditional event binding (DOM Level 1) to W3C DOM Binding. This can be a very difficult topic to understand since there are a few differences between the way IE and other browsers handle it. But John explains each difference in great detail and makes you fully aware of how to handle it with some nice examples.
John also covers creating unobtrusive scripts which doesn't assume that JavaScript will be available in the user's browser and how to handle this scenario. This also ties in to separating the three layers (Presentation, Structure and Behavior) which is also discussed. This teaches the user how to keep your inline JS event handling out of the HTML and in a separate .JS file. This makes updating your code easier and less problematic in the future.
The rest of the book focuses on using JavaScript with CSS and applying the previous techniques covered in useful examples such as form validation, creating a dynamic image gallery and some simple Ajax examples.
This is a great book if you know the basics of JavaScript and want to take your skills to the next level and especially if you're not a "true" programming and need a little more explanation. A great book!