// Support: IE<9
             // Handle iteration over inherited properties before own properties.
             if ( !support.ownFirst ) {
                 for ( key in obj ) {
                     return hasOwn.call( obj, key );
                 }
             }

             // Own properties are enumerated firstly, so to speed up,
             // if last one is own, then all properties are own.
             for ( key in obj ) {}
             return key === undefined || hasOwn.call( obj, key );

最近阅读jQuery源码,看到isPlainObject方法的这一部分代码很不理解,几经百度,终于找到答案。

先介绍一下isPlainObject方法吧,大概是未读过jQuery源码,就不知道这个方法吧。这个方法的作用是,判断一个参数是否是一个纯粹的对象(对象是通过{}或者new Object()创建的,且参数用for in遍历的属性不能是添加在参数原型上的属性)(for in遍历可以遍历出我们自己定义的属性,而原型上默认已有的属性是无法遍历出来的,例如Object.prototype.hasOwnProperty等属性无法通过for in 遍历出来)。

原来在IE9下的低版本浏览器中,使用for in遍历对象的属性时,这些浏览器是先遍历原型上的属性,之后才遍历实例属性;而在标准浏览器中,for in会先遍历实例属性,之后遍历原型上的属性。

所以, 上述代码3-7行是为了兼容IE9以下低版本浏览器,11-12行是适用于标准浏览器。(在win7的IE11上模拟IE低版本时发现并不是这种情况,大概是因为浏览器不是真正的低版本吧,有条件的可以使用真正的低版本IE浏览器试验,so,理解了这些代码就万岁了!!!)

随机推荐

  1. aptitude与apt-get的区别和联系

    aptitude 与 apt-get 一样,是 Debian 及其衍生系统中功能极其强大的包管理工具.与 apt-get 不同的是,aptitude 在处理依赖问题上更佳一些.举例来说,aptitud ...

  2. Hexo NexT主题/cnblog等博客增加点击出现红心的特效

    查看效果 每日前端 我的博客 实现:1.下载这段js代码到项目目录 ===>下载地址2.在需要的地方添加js代码 <script type="text/javascript&qu ...

  3. js动态添加、删除行

    <meta charset="utf-8"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transiti ...

  4. 七层协议&网络配置

    1.输入CMD 2.ipconfig-all 可查看详细的电脑网络配置,子网掩码(subnet mask)又叫网络掩码.地址掩码.子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网 ...

  5. python 给定数组任意组合等于一个定值的所有解

    抛出问题: 求给定数组任意组合等于一个定值的所有解 例如列表l = [1, 2, 3, 4, 5],求任意组合的结果为10的所有答案 问题分析: 实际就是列表的所有排列组合,然后算出每个排列组合的值, ...

  6. JS禁用浏览器前进后退

    <script language="javascript"> //防止页面后退 history.pushState(null, null, document.URL); ...

  7. Struts2高位漏洞升级到struts2.3.32

    Struts2高位漏洞升级到struts2.3.32 3月7日带来了一个高危漏洞Struts2漏洞——CVE编号CVE-2017-5638.其原因是由于Apache Struts2的Jakarta M ...

  8. twisted的task之cooperator和scrapy的parallel()函数

    def handle_spider_output(self, result, request, response, spider): if not result: return defer_succe ...

  9. Zabbix监控中,使用的比较好的动作信息模板

    https://www.cnblogs.com/songxingzhu/p/7299377.html 故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NA ...

  10. drf框架使用之 路飞学城(第一天)

    1. 路飞学城第一天: 知识点 使用的是序列化与反序列化的使用: 1.创建一个公共相应的Json方法: #创建一个公共响应的类: class LuffyResponse(): def __init__ ...