// 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. phpstudy中 MySQL版本升级

    问题由来:   在把数据库导入到本地库时,数据库出现报错    Error : Invalid ON UPDATE clause for 'update_time' column   查了下度娘说  ...

  2. Android 开发 监听back并且执行home键功能

    方法一: 在activity中重写onBackPressed()方法 ,注意此处一定要注释或者删除 super.onBackPressed();方法 @Override public void onB ...

  3. Could not read document: Can not deserialize instance of java.lang.String out of START_ARRAY

    线上问题: { "timestamp": "1544510665", "status": 400, "error": & ...

  4. 15Linux_DHCP_Postfix_Dovecot_LDAP

    DHCP_ Postfix_ Dovecot_ LDAP

  5. NodeJs 使用 multer 实现文件上传

    Multer 是一个 node.js 中间件,用于处理 multipart/form-data 类型的表单数据,它主要用于上传文件 注意: Multer 不会处理任何非 multipart/form- ...

  6. [SQL]删除约束

    来源:http://www.archonsystems.com/devblog/2012/05/25/how-to-drop-a-column-with-a-default-value-constra ...

  7. url跳转漏洞(1)

    转载 https://landgrey.me/open-redirect-bypass/ 0x00:漏洞场景 URL跳转漏洞的出现场景还是很杂的,出现漏洞的原因大概有以下5个: 1. 写代码时没有考虑 ...

  8. JEECG 3.7.8 新版表单校验提示风格使用&升级方法(validform 新风格漂亮,布局简单)

    JEECG 表单校验采用的是validform,默认的校验提示需要占用页面布局,提示效果较传统.jeecg这个自定义的校验提示风格,不占用页面布局,提示效果也更美观,简单易用,让表单看起来更漂亮!!! ...

  9. C# ConfigurationManager不存在问题解决

    在做串口通信的时候,需要使用"ConfigurationManager"类,但是添加"Using System.Configuration"命名空间后编译器依旧 ...

  10. C#使用List实现类似RadioButtonGroup的单选功能

    首先说说需求,有多种不同类型的UserControl用于以不同的方式显示数据,想通过在另一个view中实现某种点击选中按钮后,在数据显示view中,只让被逻辑关联的UserControl显示(Visi ...