mirror of
https://github.com/atlanticbiomedical/biomedjs.git
synced 2025-07-02 00:47:26 -04:00
51 lines
1.7 KiB
JavaScript
51 lines
1.7 KiB
JavaScript
![]() |
var baseForIn = require('./baseForIn'),
|
||
|
isObjectLike = require('./isObjectLike');
|
||
|
|
||
|
/** `Object#toString` result references. */
|
||
|
var objectTag = '[object Object]';
|
||
|
|
||
|
/** Used for native method references. */
|
||
|
var objectProto = Object.prototype;
|
||
|
|
||
|
/** Used to check objects for own properties. */
|
||
|
var hasOwnProperty = objectProto.hasOwnProperty;
|
||
|
|
||
|
/**
|
||
|
* Used to resolve the [`toStringTag`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.prototype.tostring)
|
||
|
* of values.
|
||
|
*/
|
||
|
var objToString = objectProto.toString;
|
||
|
|
||
|
/**
|
||
|
* A fallback implementation of `_.isPlainObject` which checks if `value`
|
||
|
* is an object created by the `Object` constructor or has a `[[Prototype]]`
|
||
|
* of `null`.
|
||
|
*
|
||
|
* @private
|
||
|
* @param {*} value The value to check.
|
||
|
* @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
|
||
|
*/
|
||
|
function shimIsPlainObject(value) {
|
||
|
var Ctor;
|
||
|
|
||
|
// Exit early for non `Object` objects.
|
||
|
if (!(isObjectLike(value) && objToString.call(value) == objectTag) ||
|
||
|
(!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);
|
||
|
}
|
||
|
|
||
|
module.exports = shimIsPlainObject;
|