function isPlainObject(value) {
          var Ctor;
    
          // Exit early for non `Object` objects.
          if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isArguments(value)) ||
              (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {
            return false;
          }
          // IE < 9 iterates inherited properties before own properties. If the first
          // iterated property is an object's own property then there are no inherited
          // enumerable properties.
          var result;
          // In most environments an object's own properties are iterated before
          // its inherited properties. If the last iterated property is an object's
          // own property then there are no inherited enumerable properties.
          baseForIn(value, function(subValue, key) {
            result = key;
          });
          return result === undefined || hasOwnProperty.call(value, result);
        }
function isPlainObject(value) {
          var Ctor;
    
          
          if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isArguments(value)) ||
              (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {
            return false;
          }
          
          
          
          var result;
          
          
          
          baseForIn(value, function(subValue, key) {
            result = key;
          });
          return result === undefined || hasOwnProperty.call(value, result);
        }
function isPlainObject ( value ) { var Ctor ; // Exit early for non `Object` objects. if ( ! ( isObjectLike ( value ) && objToString . call ( value ) == objectTag && ! isArguments ( value ) ) || ( ! hasOwnProperty . call ( value , 'constructor' ) && ( Ctor = value . constructor , typeof Ctor == 'function' && ! ( Ctor instanceof Ctor ) ) ) ) { return false ; } // IE < 9 iterates inherited properties before own properties. If the first // iterated property is an object's own property then there are no inherited // enumerable properties. var result ; // In most environments an object's own properties are iterated before // its inherited properties. If the last iterated property is an object's // own property then there are no inherited enumerable properties. baseForIn ( value , function ( subValue , key ) { result = key ; } ) ; return result === undefined || hasOwnProperty . call ( value , result ) ; }
Checks if `value` is a plain object, that is, an object created by the
`Object` constructor or one with a `[[Prototype]]` of `null`.

**Note:** This method assumes objects created by the `Object` constructor
have no inherited enumerable properties.

@static
@memberOf _
@category Lang
@param {*} value The value to check.
@returns {boolean} Returns `true` if `value` is a plain object, else `false`.
@example

function Foo() {
this.a = 1;
}

_.isPlainObject(new Foo);
// => false

_.isPlainObject([1, 2, 3]);
// => false

_.isPlainObject({ 'x': 0, 'y': 0 });
// => true

_.isPlainObject(Object.create(null));
// => true
Checks if value is a plain object that is an object created by the Object constructor or one with a [[ Prototype ]] of null .