diff.js
 1  'use strict';
 2  
 3  var keys         = Object.keys
 4    , diff         = require('../Array/prototype/diff')
 5    , intersection = require('../Array/prototype/intersection')
 6    , isObject     = require('./is-object');
 7  
 8  module.exports = function (obj, target) {
 9  	var k1 = keys(obj), k2 = keys(target);
10  	return [diff.call(k1, k2), intersection.call(k1, k2).filter(function (key) {
11  		return (isObject(obj[key]) && isObject(target[key])) ?
12  				(obj[key].valueOf() !== target[key].valueOf()) :
13  				(obj[key] !== target[key]);
14  	}, obj), diff.call(k2, k1)];
15  };