function formatUnexpectedArgument(arg) {
  var type = typeof arg;
  if (type !== 'object') {
    return type;
  }
  var displayName = arg.constructor && arg.constructor.name || type;
  var keys = Object.keys(arg);
  if (keys.length > 0 && keys.length < 20) {
    return displayName + ' (keys: ' + keys.join(', ') + ')';
  }
  return displayName;
}
Enqueue a callback that will be executed after all the pending updates
have processed.

@param {ReactClass} publicInstance The instance to use as `this` context.
@param {?function} callback Called after state is updated.
@param {string} callerName Name of the calling function in the public API.
@internal