jQuery.isPlainObject(obj)
----------测试参数对象是否是纯粹的对象(通过“{}”或者“new Object”创建的)
参数obj--{Object}: 用于测试是否为纯粹的对象。
/*简单的列举几个测试的例子*/ jQuery.isPlainObject({}); //true jQuery.isPlainObject(1); //false jQuery.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);
}