jQuery源码浅谈系列---$.isPlainObject

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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值