Consider this bare listing of JS frameworks, with one-sentence descriptions. At the moment it contains summaries of 78 libraries or frameworks: 23 listed as "Full-stack Frameworks / Toolkits," 12 as "Architectural Frameworks," and a further 8 as "Supplementary Libraries." Other lists organize the existing toolkits into different categories.
This profusion of developer tools is more than sufficient to keep an unprepared developer in analysis paralysis for an indefinite period as s/he tries to evaluate project requirements against the capabilities of 20 or 30 toolkits -- and that's the short list!
How do you even begin?
A couple of resources stand out to help you cut through the clutter. Both of them came together in the summer of this year.
The frameworks represented were AngularJS, Backbone, Batman, CanJS, Ember, Knockout, Meteor, and Spine. Of special interest in Sanderson's account are the lists of the points on which the frameworks generally agree, and those on which they differ. The major areas of agreement included the MV* pattern and a bias in favor of data binding. The major divide is between the "frameworks" and the "libraries" -- i.e., those toolkits that offer an architectural structure into which projects are expected to fit, and those that provide instead a set of tools to plug into your existing architecture.