Why reinvent the wheel? Give Lodash a try. It has a number of must-have functions such as isEqual().
It will brute force check each key value – just like the other examples on this page – using ECMAScript 5 and native optimizations if they’re available in the browser.
Note: Previously this answer recommended Underscore.js, but lodash has done a better job of getting bugs fixed and addressing issues with consistency.