diff options
Diffstat (limited to 'deps/npm/node_modules/cli-table2/node_modules/lodash/lang/isPlainObject.js')
-rw-r--r-- | deps/npm/node_modules/cli-table2/node_modules/lodash/lang/isPlainObject.js | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/deps/npm/node_modules/cli-table2/node_modules/lodash/lang/isPlainObject.js b/deps/npm/node_modules/cli-table2/node_modules/lodash/lang/isPlainObject.js new file mode 100644 index 0000000000..5b34c83896 --- /dev/null +++ b/deps/npm/node_modules/cli-table2/node_modules/lodash/lang/isPlainObject.js @@ -0,0 +1,71 @@ +var baseForIn = require('../internal/baseForIn'), + isArguments = require('./isArguments'), + isObjectLike = require('../internal/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`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) + * of values. + */ +var objToString = objectProto.toString; + +/** + * 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 + */ +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); +} + +module.exports = isPlainObject; |