function isObject(value) {
    var ctor,
        result = !!value && toString.call(value) == '[object Object]';

    if (result && noArgumentsClass) {
      // avoid false positives for `arguments` objects in IE < 9
      result = !isArguments(value);
    }
    if (result) {
      // IE < 9 presents nodes like `Object` objects:
      // IE < 8 are missing the node's constructor property
      // IE 8 node constructors are typeof "object"
      ctor = value.constructor;
      // check if the constructor is `Object` as `Object instanceof Object` is `true`
      if ((result = isClassOf(ctor, 'Function') && ctor instanceof ctor)) {
        // assume objects created by the `Object` constructor have no inherited enumerable properties
        // (we assume there are no `Object.prototype` extensions)
        forProps(value, function(subValue, subKey) {
          result = subKey;
        });
        // An object's own properties are iterated before inherited properties.
        // If the last iterated key belongs to an object's own property then
        // there are no inherited enumerable properties.
        result = result === true || hasKey(value, result);
      }
    }
    return result;
  }
Checks if the specified `value` is an object created by the `Object` constructor.
@private
@param {Mixed} value The value to check.
@returns {Boolean} Returns `true` if `value` is an object, else `false`.