JSFiddle - React, Tailwind, and code Playground

HTML

<div id="difference">

</div>

JavaScript

function diff(obj1,obj2,exclude) {
		var r = {};
    
    if (!exclude)	exclude = [];
    
    for (var prop in obj1) {
      if (obj1.hasOwnProperty(prop) && prop != '__proto__') {
	      	if (exclude.indexOf(obj1[prop]) == -1) {

            // check if obj2 has prop
            if (!obj2.hasOwnProperty(prop)) r[prop] = obj1[prop];

            // check if prop is object and 
            // NOT a JavaScript engine object (i.e. __proto__), if so, recursive diff
            else if (obj1[prop] === Object(obj1[prop])) {
              var difference = diff(obj1[prop], obj2[prop]);
              if (Object.keys(difference).length > 0) r[prop] = difference;
            }

            // check if obj1 and obj2 are equal
            else if (obj1[prop] !== obj2[prop]) {
            	if (obj1[prop] === undefined)
              	r[prop] = 'undefined';
            	if (obj1[prop] === null)
              	r[prop] = null;
              else if (typeof obj1[prop] === 'function')
              	r[prop] = 'function';
              else if (typeof obj1[prop] === 'object')  
                r[prop] = 'object';
              else
	              r[prop] = obj1[prop];
            }
          }
       }
       
    }
    
    return r;
}

$(document).ready(function () {
	var obj1 = {
  	a: 2,
    b: 4,
    c: 23,
    d: {
       d1: 3,
       d2: 5
    },
    e: null,
    f: null,
    g: new Object()
  }

	var obj2 = {
  	a: 2,
    b: 4,
    c: 23,
    d: {
    	 d1: 3,
       d4: 6
    },
    e: null,
    f: "",
    g: new Object()
  }

  var difference1 =	diff(obj1, obj2, [obj1.d]);
  var difference2 =	diff(obj2, obj1);
  $('#difference').html("<span>obj1: " + JSON.stringify(difference1) + " keys: " + Object.keys(difference1).length + "<br />obj2: " + JSON.stringify(difference2) + " keys: " + Object.keys(difference2).length + "</span>");
})