// 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. js实现点击按钮复制文本功能

    最近项目活动中用到复制文本功能,发现在chrome中之前的clipboard的demo失效了,查了下发现是因为版本升级导致的.最新用法如下: <!DOCTYPE html> <htm ...

  2. day72Django之ORM

    Django框架之ORM(day72)一 ORM即Object Relational Mapping,全称对象关系映射. 1 不用写sql,不会sql的人也可以写程序 2 开发效率高 3 可能sql的 ...

  3. tp5邮件发送

    一.开启SMTP服务(使用php发送邮件需要用到SMTP服务,这里以163邮箱的SMTP服务为例) 1.登录163邮箱,在首页上找到“设置”. 2.选择开启的服务,一般都全选,POP3/SMTP/IM ...

  4. 【Java基础】While循环详解

    循环结构分两大类,一类是当型,一类是直到型. 当型: 当布尔值表达式条件为True时,反复执行某语句,当布尔表达式的值为False时才停止循环,例如:while 与 for循环. 直到型: 先执行某语 ...

  5. JVM运行、类加载的全过程

    类加载机制:JVM把CLASS文件加载到内存,并对数据进行校验.解析和初始化,最终形成JVM可以直接使用的Java文件. 加载:把class文件字节码加载到内存中,并且将这些静态数据转换成方法区中的运 ...

  6. Git上传本地代码

    Git  add  .将本地文件上传至缓冲区 git   commit  -m  'project  init'  将代码上传至本地仓库 Git   push   将本地的代码传至线上(码云) git ...

  7. Mac谷歌浏览器跨域

    1.创建一个文件夹,这个文件夹是用来保存关闭安全策略后的用户信息的,名字可以随意取,位置也可以随意放,我用的是MyChromeDevUserData open -n /Applications/Goo ...

  8. React State(状态)

    function FormattedDate(props){ return ( <h1>现在是{props.date}</h1> ) } class Clock extends ...

  9. easyui-textbox多行文本中输入内容,有回车操作时将文本拼接<br/>

    <input class="easyui-textbox" name="versionText" id="versionText" d ...

  10. SpringCloud-day09-Feign与Hystrix整合

    8.5.Feign 与 Hystrix整合 服务熔断服务降级彻底解耦 前面的代码,用@HystrixCommand fallbackMethod是很不好的,因为和业务代码耦合度太高,不利于维护,所以需 ...