code: function diffValues(value, oldValue) {
      // Shortcut out for values that are exactly equal
      if (value === oldValue) return false;
  
      if (Array.isArray(value) && Array.isArray(oldValue)) {
        // If an array has changed calculate the splices
        var splices = diffArrays(value, oldValue);
        return splices.length ? splices : false;
      } else if (value && oldValue && typeof value === 'object' && typeof oldValue === 'object') {
        // If an object has changed calculate the chnages and call the callback
        // Allow dates and Number/String objects to be compared
        var valueValue = value.valueOf();
        var oldValueValue = oldValue.valueOf();
  
        // Allow dates and Number/String objects to be compared
        if (typeof valueValue !== 'object' && typeof oldValueValue !== 'object') {
          return valueValue !== oldValueValue;
        } else {
          var changeRecords = diffObjects(value, oldValue);
          return changeRecords.length ? changeRecords : false;
        }
      } else {
        // If a value has changed call the callback
        return diffBasic(value, oldValue);
      }
    }
docs: Diffs two values, returning a truthy value if there are changes or `false` if there are no changes. If the two values are both arrays or both objects, an array of changes (splices or change records) between the two will be returned. Otherwise  `true` will be returned.