docs: 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)) {
          // 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.
          forProps(value, function(subValue, subKey) { result = subKey; });
          result = result === true || hasKey(value, result);
        }
      }
      return result;
    }