$.isPlainObject
// 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,理解了这些代码就万岁了!!!)
随机推荐
- VB VB 定义及区别
VB是Visual Basic的简称,是由美国微软公司于1991年开发的一种可视化的.面向对象和采用事件驱动方式的结构化高级程序设计语言,可用于开发 Windows 环境下的各类应用程序.VC是Vis ...
- leetcode每日刷题计划-简单篇day13
Num 169 先码,回头再说,摩尔算法... tle了 class Solution { public: int majorityElement(vector<int>& num ...
- 浅谈Android之Activity生命周期
Activity作为四大组件之一,出现的频率相当高,基本上我们在android的各个地方都能看见它的踪影,因此深入了解Activity,对于开发高质量应用程序是很有帮助的.今天我们就来详细地聊聊Ac ...
- windows文件名格式的中文+数字混合字符串排序
记录一下 [DllImport("shlwapi.dll", CharSet = CharSet.Unicode)] private static extern int StrCm ...
- 【读书笔记】Segment Routing基础
- django restfulwork 源码剖析
概要: 1.restful 规范(建议); 2. django rest framework框架 内容回顾: 1.开发模式; - 普通开发模式(前后端放在一起写) - 前后端分离 好处: 后端一套,前 ...
- c# linq 汇总
例子:List<string> list = new List<string>(); list.Add("1 a");list.Add("2 b& ...
- ArcGIS 要素类平移工具-arcgis案例实习教程
ArcGIS 要素类平移工具-arcgis案例实习教程 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 目的:对整个要素类,按指定偏移距离,进行整体平移. 优点:使用 ...
- mybatis查询如何返回List<Map>类型数据
只要设定resultType而不设定resultMap就可以了: <selectid="selectByPage"parameterType="java.uti ...
- 谈谈你对spring的理解?
spring么,就是春天了.春天,动物.....不可描述的季节……你懂得!!! 希望这么说能把面试官逗乐吧. spring可以实现java模块化开发,贯穿表现层,业务层,逻辑层,实现了各个层之间的解耦 ...