var hasOwn = require('./hasOwn'); var every = require('./every'); var isObject = require('../lang/isObject'); function defaultCompare(a, b) { return a === b; } // Makes a function to compare the object values from the specified compare // operation callback. function makeCompare(callback) { return function(value, key) { return hasOwn(this, key) && callback(value, this[key]); }; } function checkProperties(value, key) { return hasOwn(this, key); } /** * Checks if two objects have the same keys and values. */ function equals(a, b, callback) { callback = callback || defaultCompare; if (!isObject(a) || !isObject(b)) { return callback(a, b); } return (every(a, makeCompare(callback), b) && every(b, checkProperties, a)); } module.exports = equals;