Part of me wishes that the book was a more in-depth look at ECMAScript 5 in its entirety; but, at the same time, I thought the book was a perfect length with great focus. It contained a lot of detail, but not so much that it overwhelmed the reader. Overall, it's definitely a book that I would recommend.
Also, for reference, here's a super comprehensive look at the support of ES5 (ECMAScript 5) features in the popular browsers:
Brought to you by Juriy Zaytsev (aka, "kangax").
I tend to agree with you on constructors. One argument against constructors is their overloaded nature. All constructor are functions and all functions could be constructors. It is up the consumer to know. Constructors can be invoked without the new operator and in that case they behave differently. This can cause bugs that can be tricky to figure out. Consider:
Above checking is an Account instance with a type of checking whereas savings is actually undefined and results in assigning type = "savings" to the global context (or throwing an error if using strict).
Still, I personally think the legibility that the new operator adds to my code is worth the extra responsibility. The cases where a constructor is accidentally invoked without the new operator can also be dealt with by forcing the proper context within the constructor or throwing an error.
Personally I like throwing an error because as I said before I prefer to use the new operator.
Being able to call a constructor with or without the "new" keyword is definitely an interesting behavior. And, I think the first place I remember seeing it allowed in both ways was in the jQuery library. I think they've since changed it (the jQuery function) to call some other init() method... but, I believe they used to perform a context check in the jQuery() method itself; and, if it wasn't called with "new", it would turn around and do it for you.
When I first saw that, it took me a good few minutes of staring at it before I even understood what the heck it was doing :)
The idea of throwing an error if the method was not invoked in the right was is interesting as well. I don't think I've ever seen that done. I'll have to let that one sink in a bit.