```
function isObjectEqual(a, b) {
if (a === void 0)
a = {};
if (b === void 0)
b = {};
// handle null value #1566
if (!a || !b) {
return a === b;
}
var aKeys = Object.keys(a).sort();
var bKeys = Object.keys(b).sort();
if (aKeys.length !== bKeys.length) {
return false;
}
return aKeys.every(function (key, i) {
var aVal = a[key];
var bKey = bKeys[i];
if (bKey !== key) {
return false;
}
var bVal = b[key];
// query values can be null and undefined
if (aVal == null || bVal == null) {
return aVal === bVal;
}
if (typeof aVal === 'object' && typeof bVal === 'object') {
return isObjectEqual(aVal, bVal);
}
return String(aVal) === String(bVal);
});
}
```