"Test Driven JavaScript Development", Chris Johansen, might serve. Not many exercises, but it walks through some of the core JavaScript principles, using tests as a learning / exploring device. "Here's a test showing how the << this >> keyword works."
It also walks through several examples of test driven development, touching on design principles as it goes. It does a great job of walking through the practicalities forcing some design choices, and the implications of the alternatives.
I came away from this with a much better grasp of JavaScript, development process, and design principles generally. I don't think I've gotten more from any single book.
But I'm a newbie still trying to learn these things. More experienced folks may find the book tiresome.
That said, I'm currently reading Learning Python the Hard Way, which pushes you through a lot of information, step-by-step but not patronizing, and teaches you not only code, but how to be organized and on top of your code.