
I really like the two-way data-binding aspect when working with a bunch of user interactions. Keeping the data-layer in sync with the view layer automatically saves developers a lot of time and prevents annoying synchronization bugs.
I also really like the very small API footprint. You can learn and memorize the whole API in a day or less and be productive very quickly.
I also like how you can use it on just a very small part of your website. You can even use it for a single form in an otherwise static webpage. If you use Knockout, you aren't making a huge technical commitment. Review collected by and hosted on G2.com.
I don't dislike this per se, but two-way data binding is considered an anti-pattern by a large swath of front end developers. You'll have to evaluate how important that is to you. There are still many very popular front end frameworks that implement this pattern, so it's not going away any time soon.
Something I did dislike about Knockout is it does not scale particularly well. Once your application grows beyond a certain complexity, you'll find yourself having to write A LOT of code to try to keep up with requirements if you try to build anything more than basic web applications.
Knockout really only provides the most basic aspect of the MV* design pattern; you'll be responsible for a client-side router, something to make request back to a server, cookie management, etc. It's important to remember Knockout is a library and NOT a framework. Review collected by and hosted on G2.com.