// 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. RN-环境配置

    良好的开端是成功的一半,这是window平台安装步骤 首先配置JDK1.8  配置JAVA_HOME环境变量 然后安装Android Studio3.2 然后安装react-native-cli np ...

  2. C++内存泄漏检测工具

    C++内存泄漏检测工具 1.VC自带的CRT:_CrtCheckMemory   调试器和 CRT 调试堆函数 1.1用法: /************************************ ...

  3. 2018-2019-2 20165205 网络攻防Exp3免杀原理与实践

    2018-2019-2 20165205 网络攻防Exp3免杀原理与实践 一.实践内容 1.1正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,加壳工具,使用 ...

  4. Powerdesigner16 逆向 postgresql9.2

    参考配置连接:https://www.cnblogs.com/simpleZone/p/5489781.html 过程中遇到的问题: 1.Powerdesigner需要用32位的jdk进行逆向,所以需 ...

  5. OS模块学习

    import os,sys s = os.getcwd() #获取当前工作目录,即当前python脚本工作的目录路径 # print(s) # os.chdir('..') #改变当前工作目录 # s ...

  6. JSTL的使用

    使用JSTL前的准备 想要使用JSTL,首先需要给工程导入JSTL的包(JSTL.jar和standard.jar). JSTL标签库 在JSTL中分为以下五个标签 核心标签 格式化标签 SQL标签 ...

  7. [PHP]正则表达式判断网址

    来源:https://segmentfault.com/q/1010000000584340/a-1020000000584362 Markdown 的作者之一写的正则表达式(原文在这) (?i)\b ...

  8. DataTable行列转换

    #region DataTable行列转换 /// <summary> /// DataTable行列转换 /// </summary> /// <param name= ...

  9. Jenkins+Git+Maven构建并部署springboot(构建多模块中的单个模块)

    主要思路:1.jenkins从git中拉取项目源码:jenkins使用maven构建并将生成的jar包通过shell脚本启动. 环境:环境:Centos7.Maven3.5.3.git(单机) 准备工 ...

  10. php解决高并发问题

    我们通常衡量一个Web系统的吞吐率的指标是QPS(Query Per Second,每秒处理请求数),解决每秒数万次的高并发场景,这个指标非常关键.举个例子,我们假设处理一个业务请求平均响应时间为10 ...