UNPKG

foop

Version:

interfaces that describe their intentions.

89 lines (81 loc) 7.55 kB
var funcToString = require('../native/functionToString') var hasOwnProperty = require('../util/hasOwnProperty') var getPrototypeOf = require('../util/getPrototypeOf') var isObjTag = require('./objTag') var isObjectLike = require('./objNotNull') var isFunction = require('./function') var isNull = require('./null') /** Used to infer the `Object` constructor. */ var objectConstructorString = funcToString.call(Object) /** * Checks if `value` is a plain object, that is, an object created by the * `Object` constructor or one with a `[[Prototype]]` of `null`. * * @since 5.0.0-beta.5 * @memberOf is * * @param {*} value The value to check. * @return {boolean} Returns `true` if `value` is a plain object, else `false`. * * @name isObjPlain * @alias isPlainObject * @alias isObjectPlain * @alias isBlankObject * * {@link https://github.com/facebook/immutable-js/blob/master/src/fromJS.js#L52 immutable-is-plain-object} * {@link https://github.com/mobxjs/mobx/blob/master/src/utils/utils.ts#L78 mobx-isobjectplain} * {@link https://github.com/lodash/lodash/blob/master/isPlainObject.js lodash-isplainobject} * {@link http://stackoverflow.com/questions/34111902/why-do-lodashs-isobject-isplainobject-behave-differently-than-typeof-x stackoverflow-lodash-isplainobject} * {@link https://github.com/madrobby/zepto/blob/master/src/zepto.js#L74 zepto-isplainobject} * {@link https://github.com/canjs/canjs/blob/2.3-legacy/util/object/isplain/isplain.js can-is-plain} * @see {@link can-is-plain} * @see {@link zepto-isplainobject} * @see {@link stackoverflow-lodash-isplainobject} * @see {@link lodash-isplainobject} * @see {@link mobx-isobjectplain} * @see {@link immutable-is-plain-object} * * @see is/objNotNull * @see is/objTag * * @func * @fork 0.8.0 * @category Lang * * @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(x) { if (!isObjectLike(x) || !isObjTag(x)) { return false } // --- get prototype var proto = getPrototypeOf(x) if (isNull(proto)) { return true } // --- check if constructor is === `Object.constructor` var constructor = hasOwnProperty(proto, 'constructor') && proto.constructor return isFunction(constructor) && constructor instanceof constructor && funcToString.call(constructor) === objectConstructorString } module.exports = isPlainObject //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqUGxhaW4uanMiLCJzb3VyY2VzIjpbIm9ialBsYWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGZ1bmNUb1N0cmluZyA9IHJlcXVpcmUoJy4uL25hdGl2ZS9mdW5jdGlvblRvU3RyaW5nJylcbmNvbnN0IGhhc093blByb3BlcnR5ID0gcmVxdWlyZSgnLi4vdXRpbC9oYXNPd25Qcm9wZXJ0eScpXG5jb25zdCBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL3V0aWwvZ2V0UHJvdG90eXBlT2YnKVxuY29uc3QgaXNPYmpUYWcgPSByZXF1aXJlKCcuL29ialRhZycpXG5jb25zdCBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL29iak5vdE51bGwnKVxuY29uc3QgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vZnVuY3Rpb24nKVxuY29uc3QgaXNOdWxsID0gcmVxdWlyZSgnLi9udWxsJylcblxuLyoqIFVzZWQgdG8gaW5mZXIgdGhlIGBPYmplY3RgIGNvbnN0cnVjdG9yLiAqL1xuY29uc3Qgb2JqZWN0Q29uc3RydWN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpXG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxuICogYE9iamVjdGAgY29uc3RydWN0b3Igb3Igb25lIHdpdGggYSBgW1tQcm90b3R5cGVdXWAgb2YgYG51bGxgLlxuICpcbiAqIEBzaW5jZSA1LjAuMC1iZXRhLjVcbiAqIEBtZW1iZXJPZiBpc1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICpcbiAqIEBuYW1lIGlzT2JqUGxhaW5cbiAqIEBhbGlhcyBpc1BsYWluT2JqZWN0XG4gKiBAYWxpYXMgaXNPYmplY3RQbGFpblxuICogQGFsaWFzIGlzQmxhbmtPYmplY3RcbiAqXG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2ltbXV0YWJsZS1qcy9ibG9iL21hc3Rlci9zcmMvZnJvbUpTLmpzI0w1MiBpbW11dGFibGUtaXMtcGxhaW4tb2JqZWN0fVxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tb2J4anMvbW9ieC9ibG9iL21hc3Rlci9zcmMvdXRpbHMvdXRpbHMudHMjTDc4IG1vYngtaXNvYmplY3RwbGFpbn1cbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iL21hc3Rlci9pc1BsYWluT2JqZWN0LmpzIGxvZGFzaC1pc3BsYWlub2JqZWN0fVxuICoge0BsaW5rIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQxMTE5MDIvd2h5LWRvLWxvZGFzaHMtaXNvYmplY3QtaXNwbGFpbm9iamVjdC1iZWhhdmUtZGlmZmVyZW50bHktdGhhbi10eXBlb2YteCBzdGFja292ZXJmbG93LWxvZGFzaC1pc3BsYWlub2JqZWN0fVxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tYWRyb2JieS96ZXB0by9ibG9iL21hc3Rlci9zcmMvemVwdG8uanMjTDc0IHplcHRvLWlzcGxhaW5vYmplY3R9XG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2NhbmpzL2NhbmpzL2Jsb2IvMi4zLWxlZ2FjeS91dGlsL29iamVjdC9pc3BsYWluL2lzcGxhaW4uanMgY2FuLWlzLXBsYWlufVxuICogQHNlZSB7QGxpbmsgY2FuLWlzLXBsYWlufVxuICogQHNlZSB7QGxpbmsgemVwdG8taXNwbGFpbm9iamVjdH1cbiAqIEBzZWUge0BsaW5rIHN0YWNrb3ZlcmZsb3ctbG9kYXNoLWlzcGxhaW5vYmplY3R9XG4gKiBAc2VlIHtAbGluayBsb2Rhc2gtaXNwbGFpbm9iamVjdH1cbiAqIEBzZWUge0BsaW5rIG1vYngtaXNvYmplY3RwbGFpbn1cbiAqIEBzZWUge0BsaW5rIGltbXV0YWJsZS1pcy1wbGFpbi1vYmplY3R9XG4gKlxuICogQHNlZSBpcy9vYmpOb3ROdWxsXG4gKiBAc2VlIGlzL29ialRhZ1xuICpcbiAqIEBmdW5jXG4gKiBAZm9yayAwLjguMFxuICogQGNhdGVnb3J5IExhbmdcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMVxuICogfVxuICpcbiAqIGlzUGxhaW5PYmplY3QobmV3IEZvbylcbiAqIC8vPT4gZmFsc2VcbiAqXG4gKiBpc1BsYWluT2JqZWN0KFsxLCAyLCAzXSlcbiAqIC8vPT4gZmFsc2VcbiAqXG4gKiBpc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqIGlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSlcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh4KSB7XG4gIGlmICghaXNPYmplY3RMaWtlKHgpIHx8ICFpc09ialRhZyh4KSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gLS0tIGdldCBwcm90b3R5cGVcbiAgY29uc3QgcHJvdG8gPSBnZXRQcm90b3R5cGVPZih4KVxuICBpZiAoaXNOdWxsKHByb3RvKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAtLS0gY2hlY2sgaWYgY29uc3RydWN0b3IgaXMgPT09IGBPYmplY3QuY29uc3RydWN0b3JgXG5cbiAgY29uc3QgY29uc3RydWN0b3IgPVxuICAgIGhhc093blByb3BlcnR5KHByb3RvLCAnY29uc3RydWN0b3InKSAmJlxuICAgIHByb3RvLmNvbnN0cnVjdG9yXG5cbiAgcmV0dXJuIGlzRnVuY3Rpb24oY29uc3RydWN0b3IpICYmIGNvbnN0cnVjdG9yIGluc3RhbmNlb2YgY29uc3RydWN0b3IgJiZcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChjb25zdHJ1Y3RvcikgPT09IG9iamVjdENvbnN0cnVjdG9yU3RyaW5nXG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQbGFpbk9iamVjdFxuIl0sIm5hbWVzIjpbImNvbnN0Il0sIm1hcHBpbmdzIjoiQUFBQUEsR0FBSyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsNEJBQTRCLENBQUM7QUFDMURBLEdBQUssQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixDQUFDO0FBQ3hEQSxHQUFLLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQztBQUN4REEsR0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO0FBQ3BDQSxHQUFLLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUM7QUFDNUNBLEdBQUssQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQztBQUN4Q0EsR0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDOzs7QUFHaENBLEdBQUssQ0FBQyx1QkFBdUIsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF3RHpELFNBQVMsYUFBYSxDQUFDLENBQUMsRUFBRTtFQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQ3BDLE9BQU8sS0FBSztHQUNiOzs7RUFHREEsR0FBSyxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDO0VBQy9CLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQ2pCLE9BQU8sSUFBSTtHQUNaOzs7O0VBSURBLEdBQUssQ0FBQyxXQUFXO0lBQ2YsY0FBYyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUM7SUFDcEMsS0FBSyxDQUFDLFdBQVc7O0VBRW5CLE9BQU8sVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLFdBQVcsWUFBWSxXQUFXO0lBQ2xFLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssdUJBQXVCO0NBQzdEOztBQUVELE1BQU0sQ0FBQyxPQUFPLEdBQUcsYUFBYTsifQ==