jQuery源码浅谈系列---$.isPlainObject
jQuery.isPlainObject(obj)
?
?? ----------测试参数对象是否是纯粹的对象(通过“{}”或者“new Object”创建的)
?
?
??参数obj--{Object}: 用于测试是否为纯粹的对象。
?
?
?
/*简单的列举几个测试的例子*/jQuery.isPlainObject({}); //truejQuery.isPlainObject(1); //falsejQuery.isPlainObject("zhangyaochun"); //false?
?
源码选自于1.4.2版本
?
?
var hasOwnProperty = Object.prototype.hasOwnProperty, toString = Object.prototype.toString;isPlainObject:function(obj){ //!obj ---一定要是对象 // toString.call(obj) !== "[object Object]"----因为IE,检测constructor //obj.nodeType ----避免不是DOM nodes //obj.setInterval ---排除window if(!obj || toString.call(obj) !== "[object Object]" ||obj.nodeType ||obj.setInterval){ return false; } //是否是new fun()自定义对象 //constructor是否是继承原型链 //原型链是否有isPrototypeOf if(obj.constructor && !hasOwnProperty.call(obj,"constructor") && !hasOwnProperty.call(obj.constructor.prototype,"isPrototypeOf")){ return false; } //判断是否有继承关系 //自己的属性会被首先遍历 var key; for(key in obj){} //直接看最后一项是未了加速遍历的过程 return key === undefined || hasOwnProperty.call(obj,key);}