From 77242bfb957d2c4374cafb2fcd6d62b112f6b3b2 Mon Sep 17 00:00:00 2001 From: John-David Dalton Date: Sun, 23 Sep 2012 21:30:14 -0700 Subject: [PATCH] Expose `_.isPlainObject`. Former-commit-id: 884bc87df7773ef3cb5e52725d5a37f07812385a --- lodash.js | 65 ++++++++++++++++++++++++++++++++++----------------- lodash.min.js | 52 ++++++++++++++++++++--------------------- 2 files changed, 69 insertions(+), 48 deletions(-) diff --git a/lodash.js b/lodash.js index a2984ada9..f3dd15bd7 100644 --- a/lodash.js +++ b/lodash.js @@ -906,7 +906,7 @@ * @returns {Boolean} Returns `true` if the `value` is a function, else `false`. * @example * - * _.isFunction(''.concat); + * _.isFunction(_); * // => true */ function isFunction(value) { @@ -919,6 +919,44 @@ }; } + /** + * Checks if a given `value` is an object created by the `Object` constructor. + * + * @static + * @memberOf _ + * @category Objects + * @param {Mixed} value The value to check. + * @param {Boolean} [skipArgsCheck=false] Internally used to skip checks for + * `arguments` objects. + * @returns {Boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Stooge(name, age) { + * this.name = name; + * this.age = age; + * } + * + * _.isPlainObject(new Stooge('moe', 40)); + * // false + * + * _.isPlainObject([1, 2, 3]); + * // false + * + * _.isPlainObject({ 'name': 'moe', 'age': 40 }); + * // => true + */ + var isPlainObject = objectTypes.__proto__ != ObjectProto ? isPlainFallback : function(value, skipArgsCheck) { + if (!value) { + return false; + } + var valueOf = value.valueOf, + objProto = typeof valueOf == 'function' && (objProto = valueOf.__proto__) && objProto.__proto__; + + return objProto + ? value == objProto || (value.__proto__ == objProto && (skipArgsCheck || !isArguments(value))) + : isPlainFallback(value); + }; + /** * A fallback implementation of `isPlainObject` that checks if a given `value` * is an object created by the `Object` constructor, assuming objects created @@ -964,27 +1002,6 @@ return result; } - /** - * Checks if a given `value` is an object created by the `Object` constructor. - * - * @private - * @param {Mixed} value The value to check. - * @param {Boolean} [skipArgsCheck=false] Internally used to skip checks for - * `arguments` objects. - * @returns {Boolean} Returns `true` if `value` is a plain object, else `false`. - */ - var isPlainObject = objectTypes.__proto__ != ObjectProto ? isPlainFallback : function(value, skipArgsCheck) { - if (!value) { - return false; - } - var valueOf = value.valueOf, - objProto = typeof valueOf == 'function' && (objProto = valueOf.__proto__) && objProto.__proto__; - - return objProto - ? value == objProto || (value.__proto__ == objProto && (skipArgsCheck || !isArguments(value))) - : isPlainFallback(value); - }; - /** * A shim implementation of `Object.keys` that produces an array of the given * object's own enumerable property names. @@ -1553,6 +1570,9 @@ * _.isObject({}); * // => true * + * _.isObject([1, 2, 3]); + * // => true + * * _.isObject(1); * // => false */ @@ -4160,6 +4180,7 @@ lodash.isNull = isNull; lodash.isNumber = isNumber; lodash.isObject = isObject; + lodash.isPlainObject = isPlainObject; lodash.isRegExp = isRegExp; lodash.isString = isString; lodash.isUndefined = isUndefined; diff --git a/lodash.min.js b/lodash.min.js index af6567f54..e3b0ce6cd 100644 --- a/lodash.min.js +++ b/lodash.min.js @@ -4,37 +4,37 @@ */ ;(function(e,t){function s(e){return new o(e)}function o(e){if(e&&e.__wrapped__)return e;this.__wrapped__=e}function u(e,t){return function(n,r,i){return e.call(t,n,r,i)}}function a(e,t,n){t||(t=0);var r=e.length,i=r-t>=(n||B),s=i?{}:e;if(i)for(var o=t-1;++on||e===t)return 1;if(en;n++)t+="j='"+a.p[n]+"';if(" -,"constructor"==a.p[n]&&(t+="!(g&&g.prototype===k)&&"),t+="h.call(k,j)){A=k[j];"+a.m.i+"}"}if(a.c||a.n)t+="}"}return t+=a.e+";return u",Function("D,E,F,c,I,f,J,h,i,M,O,Q,S,T,W,X,m,r,w,x,z","var G=function("+e+"){"+t+"};return G")(_t,D,A,u,f,Q,Yt,G,O,T,m,$t,g,Jt,vt,Bt,ot,Z,et,gt,tt)}function h(e){return"\\"+jt[e]}function p(e){return Pt[e]}function d(){}function v(e){return Ht[e]}function m(e){return tt.call(e)==lt}function g(e){return"function"==typeof e}function y(e,t){var n=i;if(!e||"object"!=typeof +a.a,t=/^[^,]+/.exec(e)[0],n=a.s,a.g=t,a.h=wt,a.k=Ot,a.n=xt,a.p=K,a.r=a.r!==i,a.s=n==r?Mt:n,a.o==r&&(a.o=Ct),a.f||(a.f="if(!"+t+")return u");if("e"!=t||!a.c.i)a.c=r;t="",a.s&&(t+="'use strict';"),t+="var j,B,k="+a.g+",u",a.j&&(t+="="+a.j),t+=";"+a.f+";"+a.q+";",a.c&&(t+="var l=k.length;j=-1;",a.m&&(t+="if(l===+l){"),a.o&&(t+="if(z.call(k)==x){k=k.split('')}"),t+=a.c.d+";while(++jn;n++)t+="j='"+a.p[n]+"';if(" +,"constructor"==a.p[n]&&(t+="!(g&&g.prototype===k)&&"),t+="h.call(k,j)){B=k[j];"+a.m.i+"}"}if(a.c||a.n)t+="}"}return t+=a.e+";return u",Function("E,F,G,c,J,f,K,h,i,N,P,R,T,U,X,Y,m,r,w,x,z,A","var H=function("+e+"){"+t+"};return H")(_t,D,A,u,f,Q,Yt,G,O,T,m,$t,g,Jt,vt,Bt,ot,Z,et,gt,tt)}function h(e){return"\\"+jt[e]}function p(e){return Pt[e]}function d(){}function v(e){return Ht[e]}function m(e){return tt.call(e)==lt}function g(e){return"function"==typeof e}function y(e,t){var n=i;if(!e||"object"!=typeof e||!t&&m(e))return n;var r=e.constructor;return(!kt||"function"==typeof e.toString||"string"!=typeof (e+""))&&(!g(r)||r instanceof r)?St?(Yt(e,function(e,t,r){return n=!G.call(r,t),i}),n===i):(Yt(e,function(e,t){n=t}),n===i||G.call(e,n)):n}function b(e,t,s,o,u){if(e==r)return e;s&&(t=i);if(s=Bt[typeof e]){var a=tt.call(e);if(!Dt[a]||Tt&&m(e))return e;var f=a==ct,s=f||(a==vt?Jt(e,n):s)}if(!s||!t)return s?f?et.call(e):Gt({},e):e;s=e.constructor;switch(a){case ht:return new s(e==n);case pt:return new s(+e);case dt:case gt:return new s(e);case mt:return s(e.source,z.exec(e))}o||(o=[]),u||(u=[]);for(a=o.length;a--;)if(o[a]==e)return u[a];var l=f?s(a=e.length):{};o.push(e),u.push(l);if(f)for(f=-1;++f++u;)if(c=K[u],G.call(e,c)&&(!G.call(t,c)||!w(e[c],t[c],s,o)))return i;return n}function E(e,t,n,r){if(!e)return n;var s=e.length,o=3>arguments.length;if(s!==+s)var u=rn(e),s=u.length;return wn(e,function(e,n,a,f){return a=u?u[--s]:--s,o?(o=i,f[a]):t.call(r,e,f[a],a,f)},n)}function S(e,t,n){if(e)return t==r||n?e[0]:et.call(e,0,t)} -function x(e,t){var n=[];if(!e)return n;for(var r,i=-1,s=e.length;++in?ut(0,i+n):n)-1}for(;++ri&&(i=e[s]);return i}for(n&&(t=u(t,n));++sr&&(r=n,i=e[s]);return i}function C(e,t,n) -{return e?et.call(e,t==r||n?1:t):[]}function k(e,t,n,r){if(!e)return 0;var i=0,s=e.length;if(n){r&&(n=A(n,r));for(t=n(t);i>>1,n(e[r])>>1,e[r]T(f,r))f.push(r),s.push(e[o]);return s}function A(e,t){return At||nt&&2|{(\/]|\[\D|\b(?:delete|in|instanceof|new|typeof|void)\b/ +a&&g(f)&&f instanceof f)))return i;for(var c in e)if(G.call(e,c)&&(l++,!G.call(t,c)||!w(e[c],t[c],s,o)))return i;for(c in t)if(G.call(t,c)&&!(l--))return i;if(wt)for(;7>++u;)if(c=K[u],G.call(e,c)&&(!G.call(t,c)||!w(e[c],t[c],s,o)))return i;return n}function E(e,t,n,r){if(!e)return n;var s=e,o=e.length,u=3>arguments.length;if(o!==+o)var a=rn(e),o=a.length;else Ct&&tt.call(e)==gt&&(s=e.split(""));return vn(e,function(e,f,l){f=a?a[--o]:--o,n=u?(u=i,s[f]):t.call(r,n,s[f],f,l)}),n}function S(e,t,n){if( +e)return t==r||n?e[0]:et.call(e,0,t)}function x(e,t){var n=[];if(!e)return n;for(var r,i=-1,s=e.length;++in?ut(0,i+n):n)-1}for(;++rs&&(s=e[o]);return s}for(r!==t&&(n=u(n,r));++oi&& +(i=r,s=e[o]);return s}function C(e,t,n){return e?et.call(e,t==r||n?1:t):[]}function k(e,n,r,i){if(!e)return 0;var s=0,o=e.length;if(r){i!==t&&(r=A(r,i));for(n=r(n);s>>1,r(e[i])>>1,e[i]T(l,s))l.push(s),o.push(e[a]);return o}function A(e,t){return At||nt&&2< +arguments.length?nt.call.apply(nt,arguments):l(e,t,et.call(arguments,2))}function O(e){return e}function M(e){vn(en(e),function(t){var r=s[t]=e[t];o.prototype[t]=function(){var e=[this.__wrapped__];return arguments.length&&Y.apply(e,arguments),e=r.apply(s,e),this.__chain__&&(e=new o(e),e.__chain__=n),e}})}var n=!0,r=null,i=!1,_="object"==typeof exports&&exports&&("object"==typeof global&&global&&global==global.global&&(e=global),exports),D=Array.prototype,P=Object.prototype,H=0,B=30,j=e._,F=/[-?+=!~*%&^<>|{(\/]|\[\D|\b(?:delete|in|instanceof|new|typeof|void)\b/ ,I=/&(?:amp|lt|gt|quot|#x27);/g,q=/\b__p\+='';/g,R=/\b(__p\+=)''\+/g,U=/(__e\(.*?\)|\b__t\))\+'';/g,z=/\w*$/,W=/(?:__e|__t=)\(\s*(?![\d\s"']|this\.)/g,X=RegExp("^"+(P.valueOf+"").replace(/[.*+?^=!:${}()|[\]\/\\]/g,"\\$&").replace(/valueOf|for [^\]]+/g,".+?")+"$"),V=/($^)/,$=/[&<>"']/g,J=/['\n\r\t\u2028\u2029\\]/g,K="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "),Q=D.concat,G=P.hasOwnProperty,Y=D.push,Z=P.propertyIsEnumerable,et=D.slice,tt= P.toString,nt=X.test(nt=et.bind)&&nt,rt=Math.floor,it=X.test(it=Array.isArray)&&it,st=e.isFinite,ot=X.test(ot=Object.keys)&&ot,ut=Math.max,at=Math.min,ft=Math.random,lt="[object Arguments]",ct="[object Array]",ht="[object Boolean]",pt="[object Date]",dt="[object Number]",vt="[object Object]",mt="[object RegExp]",gt="[object String]",yt=e.clearTimeout,bt=e.setTimeout,wt,Et,St,xt=n;(function(){function e(){this.x=1}var t={0:1,length:1},n=[];e.prototype={valueOf:1,y:1};for(var r in new e)n.push(r);for(r in arguments)xt=!r;wt=4>(n+"").length,St="x"!=n[0],Et=(n.splice.call(t,0,1),t[0])})(1);var Tt=!m(arguments),Nt="x"!=et.call("x")[0],Ct="xx"!="x"[0]+Object("x")[0];try{var kt=("[object Object]",tt.call(e.document||0)==vt)}catch(Lt){}var At=nt&&/\n|Opera/.test(nt+tt.call(e.opera)),Ot=ot&&/^.+$|true/.test(ot+!!e.attachEvent),Mt=!At,_t={};_t[ht]=_t[pt]=_t["[object Function]"]=_t[dt]=_t[vt]=_t[mt]=i,_t[lt]=_t[ct]=_t[gt]=n;var Dt={};Dt[lt]=Dt["[object Function]"]=i,Dt[ct]=Dt[ht]=Dt[pt]=Dt[dt]=Dt[vt]=Dt[mt -]=Dt[gt]=n;var Pt={"&":"&","<":"<",">":">",'"':""","'":"'"},Ht={"&":"&","<":"<",">":">",""":'"',"'":"'"},Bt={"boolean":i,"function":n,object:n,number:i,string:i,"undefined":i,unknown:n},jt={"\\":"\\","'":"'","\n":"n","\r":"r"," ":"t","\u2028":"u2028","\u2029":"u2029"};s.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,variable:""};var Ft={a:"e,d,y",j:"e",q:"if(!d)d=i;else if(y)d=c(d,y)",i:"if(d(A,j,e)===false)return u" -},It={j:"{}",q:"var q;if(typeof d!='function'){var hh=d;d=function(A){return A[hh]}}else if(y)d=c(d,y)",i:"q=d(A,j,e);(h.call(u,q)?u[q]++:u[q]=1)"},qt={j:"true",i:"if(!d(A,j,e))return!u"},Rt={r:i,s:i,a:"n",j:"n",q:"for(var a=1,b=arguments.length;a-1"},i:"if(A===gg)return true"}),cn=c(Ft,It),hn=c(Ft,qt),pn=c(Ft,Ut),dn=c(Ft,zt,{j:"",i:"if(d(A,j,e))return A"}),vn=c(Ft,zt),mn=c(Ft,It,{i:"q=d(A,j,e);(h.call(u,q)?u[q]:u[q]=[]).push(A)"}),gn=c(Xt,{a:"e,U",q:"var C=w.call(arguments,2),R=typeof U=='function'",i:{b:"u[j]=(R?U:A[U]).apply(A,C)",l:"u"+(Ot?"[o]=":".push")+"((R?U:A[U]).apply(A,C))"}}),yn=c(Ft,Xt),bn=c(Xt,{a:"e,aa",i:{b:"u[j]=A[aa]",l:"u"+(Ot?"[o]=":".push")+"(A[aa])"} -}),wn=c({a:"e,d,B,y",j:"B",q:"var V=arguments.length<3;if(y)d=c(d,y)",d:{b:"if(V)u=k[++j]"},i:{b:"u=d(u,A,j,e)",l:"u=V?(V=false,A):d(u,A,j,e)"}}),En=c(Ft,Ut,{i:"!"+Ut.i}),Sn=c(Ft,qt,{j:"false",i:qt.i.replace("!","")}),xn=c(Ft,It,Xt,{i:{b:"u[j]={a:d(A,j,e),b:j,c:A}",l:"u"+(Ot?"[o]=":".push")+"({a:d(A,j,e),b:j,c:A})"},e:"u.sort(I);l=u.length;while(l--)u[l]=u[l].c"}),Tn=c(Ut,{a:"e,Z",q:"var t=[];J(Z,function(A,q){t.push(q)});var bb=t.length",i:"for(var q,Y=true,s=0;s1){for(var j=1;je?t():function(){if(1>--e)return t.apply(this,arguments)}},s.bind=A,s.bindAll=Nn,s.chain=function(e){return e=new o(e),e.__chain__=n,e},s.clone=b,s.compact=function(e){var t=[];if(!e)return t;for(var n=-1,r=e.length;++n":">",'"':""","'":"'"},Ht={"&":"&","<":"<",">":">",""":'"',"'":"'"},Bt={"boolean":i,"function":n,object:n,number:i,string:i,"undefined":i,unknown:n},jt={"\\":"\\","'":"'","\n":"n","\r":"r"," ":"t","\u2028":"u2028","\u2029":"u2029"};s.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,variable:""};var Ft={a:"e,d,y",j:"e",q:"if(!d)d=i;else if(y!==A)d=c(d,y)",i:"if(d(B,j,e)===false)return u" +},It={j:"{}",q:"var q;if(typeof d!='function'){var ii=d;d=function(B){return B[ii]}}else if(y!==A)d=c(d,y)",i:"q=d(B,j,e);(h.call(u,q)?u[q]++:u[q]=1)"},qt={j:"true",i:"if(!d(B,j,e))return!u"},Rt={r:i,s:i,a:"n",j:"n",q:"for(var a=1,b=arguments.length;a-1"},i:"if(B===hh)return true"}),cn=c(Ft,It),hn=c(Ft,qt),pn=c(Ft,Ut),dn=c(Ft,zt,{j:"",i:"if(d(B,j,e))return B"}),vn=c(Ft,zt),mn=c(Ft,It,{i:"q=d(B,j,e);(h.call(u,q)?u[q]:u[q]=[]).push(B)"}),gn=c(Xt,{a:"e,V",q:"var D=w.call(arguments,2),S=typeof V=='function'",i:{b:"u[j]=(S?V:B[V]).apply(B,D)",l:"u"+(Ot?"[o]=":".push")+"((S?V:B[V]).apply(B,D))"}}),yn=c(Ft,Xt),bn=c(Xt,{a:"e,bb",i:{b:"u[j]=B[bb]",l:"u"+(Ot?"[o]=":".push")+"(B[bb])" +}}),wn=c({a:"e,d,C,y",j:"C",q:"var W=arguments.length<3;if(y!==A)d=c(d,y)",d:{b:"if(W)u=k[++j]"},i:{b:"u=d(u,B,j,e)",l:"u=W?(W=false,B):d(u,B,j,e)"}}),En=c(Ft,Ut,{i:"!"+Ut.i}),Sn=c(Ft,qt,{j:"false",i:qt.i.replace("!","")}),xn=c(Ft,It,Xt,{i:{b:"u[j]={a:d(B,j,e),b:j,c:B}",l:"u"+(Ot?"[o]=":".push")+"({a:d(B,j,e),b:j,c:B})"},e:"u.sort(J);l=u.length;while(l--)u[l]=u[l].c"}),Tn=c(Ut,{a:"e,aa",q:"var t=[];K(aa,function(B,q){t.push(q)});var cc=t.length",i:"for(var q,Z=true,s=0;s1){for(var j=1;je?t():function(){if(1>--e)return t.apply(this,arguments)}},s.bind=A,s.bindAll=Nn,s.chain=function(e){return e=new o(e),e.__chain__=n,e},s.clone=b,s.compact=function(e){var t=[];if(!e)return t;for(var n=-1,r=e.length;++nT(t,n)){for(var u=1;un?ut(0,r+n):at(n,r-1))+1);r--;)if(e[r]===t)return r;return-1},s.lateBind=function(e,t){return l(t,e,et.call(arguments,2))},s.map=yn,s.max=N,s.memoize=function(e,t){var n={};return function(){var r=t?t.apply(this,arguments) -:arguments[0];return G.call(n,r)?n[r]:n[r]=e.apply(this,arguments)}},s.merge=sn,s.min=function(e,t,n){var r=Infinity,i=r;if(!e)return i;var s=-1,o=e.length;if(!t){for(;++s=f?(a=r,s=e.apply(o,i)):u||(u=bt(n,f)),s}},s.times=function(e,t,n){var r=-1,i=Array(e||0);if(n)for(;++rT(r,t[e])&&r.push(t[e]);return r},s.uniq=L,s.uniqueId=function(e){var t=H++;return e?e+t:t},s.values=fn,s.where=Tn,s.without=function(e){var t=[];if(!e)return t;for(var n=-1,r=e.length,i=a(arguments,1,20);++nT(t,n)){for(var u=1;un?ut(0,r+n):at(n,r-1))+1 +);r--;)if(e[r]===t)return r;return-1},s.lateBind=function(e,t){return l(t,e,et.call(arguments,2))},s.map=yn,s.max=N,s.memoize=function(e,t){var n={};return function(){var r=t?t.apply(this,arguments):arguments[0];return G.call(n,r)?n[r]:n[r]=e.apply(this,arguments)}},s.merge=sn,s.min=function(e,n,r){var i=Infinity,s=i;if(!e)return s;var o=-1,a=e.length;if(!n){for(;++o=f?(a=r,s=e.apply(o,i)):u||(u=bt(n,f)),s}},s.times=function(e,n,r){var e=+e||0,i=-1,s=Array(e);if(r!==t)for(;++iT(r,t[e])&&r.push(t[e +]);return r},s.uniq=L,s.uniqueId=function(e){var t=H++;return e?e+t:t},s.values=fn,s.where=Tn,s.without=function(e){var t=[];if(!e)return t;for(var n=-1,r=e.length,i=a(arguments,1,20);++n