IE8对JS通过属性和数组遍历解析不一样的地方探讨


Posted in Javascript onMay 06, 2013

以文谨记在此被浏览器版本差异的坑。

Array.prototype.Contains = function (str) { 
if (!str) 
return false; 
for (var i = 0; i < this.length; i++) { 
if (this[i] == str) { 
return true; 
} 
} 
return false; 
} 
var tmp = new Array(); 
tmp.push("1"); 
tmp.push("2"); 
tmp.push("3"); 
alert("遍历属性"); 
for ( var i in tmp ) { 
alert(tmp[i]); 
} 
alert("遍历数组"); 
for ( var i=0;i<tmp.length;i++ ) { 
alert(tmp[i]); 
}

如果是非IE8浏览器,例如(IE7、IE9、Chrome、FF,仅测试这几种)
通过属性和数组遍历,其结果是一样的。
但对于IE8,结果会有一点小小的差异,在IE8下会把原型链扩展方法当做一个属性输出,大家可以测试一下。

之所以发现这个差异,也是因为解决了一个诡异的bug,有同事在代码里面使用for ( var i in tmp )这种方式来遍历数组的每个元素,如果正好对Array定义了原型链方法,则会发生这个问题。
所以建议:如果遍历数组元素,还是应该采用标准的写法 for ( var i=0;i<tmp.length;i++ )。

Javascript 相关文章推荐
浅谈Javascript鼠标和滚轮事件
Jun 27 Javascript
jquery弹出框的用法示例(一)
Aug 26 Javascript
JavaScript模块随意拖动示例代码
May 27 Javascript
自编jQuery插件实现模拟alert和confirm
Sep 01 Javascript
使用不同的方法结合/合并两个JS数组
Sep 18 Javascript
jQuery移动web开发中的页面初始化与加载事件
Dec 03 Javascript
在JavaScript中call()与apply()区别
Jan 22 Javascript
浅谈jQuery 选择器和dom操作
Jun 07 Javascript
vue.js中Vue-router 2.0基础实践教程
May 08 Javascript
通过实例学习React中事件节流防抖
Jun 17 Javascript
js实现简单的日历显示效果函数示例
Nov 25 Javascript
vue中使用router全局守卫实现页面拦截的示例
Oct 23 Javascript
javascript中encodeURI和decodeURI方法使用介绍
May 06 #Javascript
JavaScript创建类/对象的几种方式概述及实例
May 06 #Javascript
jQuery fadeTo方法调整图片的透明度使用介绍
May 06 #Javascript
animate动画示例(泪奔的小孩)及stop和delay的使用
May 06 #Javascript
jQuery动画animate方法使用介绍
May 06 #Javascript
JS修改css样式style浅谈
May 06 #Javascript
用JavaScript修改CSS属性的代码
May 06 #Javascript
You might like
PHP函数shuffle()取数组若干个随机元素的方法分析
2016/04/02 PHP
PHP依赖注入原理与用法分析
2018/08/21 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
2019/10/10 PHP
JQuery优缺点分析说明
2010/06/09 Javascript
用js实现输入提示(自动完成)的实例代码
2013/06/14 Javascript
jQuery 事件的命名空间简单了解
2013/11/22 Javascript
Jquery实现顶部弹出框特效
2015/08/08 Javascript
每天一篇javascript学习小结(Function对象)
2015/11/16 Javascript
jQuery UI库中dialog对话框功能使用全解析
2016/04/23 Javascript
浅谈bootstrap源码分析之tab(选项卡)
2016/06/06 Javascript
实例讲解JavaScript中的this指向错误解决方法
2016/06/13 Javascript
详谈js中标准for循环与foreach(for in)的区别
2017/11/02 Javascript
angular使用md5,CryptoJS des加密的方法
2019/06/03 Javascript
利用不到200行代码写一款属于你自己的js类库
2019/07/08 Javascript
详解nvm管理多版本node踩坑
2019/07/26 Javascript
详解vue中在循环中使用@mouseenter 和 @mouseleave事件闪烁问题解决方法
2020/04/07 Javascript
Vue路由切换页面不更新问题解决方案
2020/07/10 Javascript
js实现省级联动(数据结构优化)
2020/07/17 Javascript
react+antd 递归实现树状目录操作
2020/11/02 Javascript
python 图片验证码代码
2008/12/07 Python
在Python中测试访问同一数据的竞争条件的方法
2015/04/23 Python
通过Python实现自动填写调查问卷
2017/09/06 Python
对Python通过pypyodbc访问Access数据库的方法详解
2018/10/27 Python
python提取照片坐标信息的实例代码
2019/08/14 Python
详解Python图像处理库Pillow常用使用方法
2019/09/02 Python
Python 判断时间是否在时间区间内的实例
2020/05/16 Python
JAVA程序员面试题
2012/10/03 面试题
韩语专业本科生求职信
2013/10/01 职场文书
《莫高窟》教学反思
2014/02/25 职场文书
数学高效课堂实施方案
2014/03/29 职场文书
房屋继承公证书
2014/04/10 职场文书
学生安全承诺书
2014/05/22 职场文书
经销商年会策划方案
2014/05/29 职场文书
2014市国税局对照检查材料思想汇报
2014/09/23 职场文书
2015年乡镇平安建设工作总结
2015/05/13 职场文书
2015年出纳工作总结与计划
2015/05/18 职场文书