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实例教程(19) 使用HoTMetal(2)
Dec 23 Javascript
javascript与jquery中跳出循环的区别总结
Nov 04 Javascript
无刷新上传文件并返回自定义值
Jun 11 Javascript
Javascript控制div属性动态变化实例分析
Oct 08 Javascript
浅析node连接数据库(express+mysql)
Nov 30 Javascript
js实现分页功能
May 24 Javascript
bootstrap日期插件daterangepicker使用详解
Oct 19 Javascript
Angular浏览器插件Batarang介绍及使用
Feb 07 Javascript
详解vue添加删除元素的方法
Jun 30 Javascript
JS实现判断数组是否包含某个元素示例
May 24 Javascript
如何在postman中添加cookie信息步骤解析
Jun 30 Javascript
vue中element 的upload组件发送请求给后端操作
Sep 07 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
ThinkPHP实现将SESSION存入MYSQL的方法
2014/07/22 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
PHP实现图片压缩
2020/09/09 PHP
使用jQuery避免鼠标双击的解决方案
2013/08/21 Javascript
dreamweaver 8实现Jquery自动提示
2014/12/04 Javascript
JS控制表格实现一条光线流动分割行的方法
2015/03/09 Javascript
在JavaScript中使用对数Math.log()方法的教程
2015/06/15 Javascript
浅谈JavaScript中的this指针和引用知识
2016/08/05 Javascript
js实现本地时间同步功能
2017/08/26 Javascript
Bootstrap 中data-[*] 属性的整理
2018/03/13 Javascript
Electron-vue脚手架改造vue项目的方法
2018/10/22 Javascript
浅谈Angular单元测试总结
2019/03/22 Javascript
vue路由守卫+登录态管理实例分析
2019/05/21 Javascript
什么时候不能在 Node.js 中使用 Lock Files
2019/06/24 Javascript
JS实现json数组排序操作实例分析
2019/10/28 Javascript
使用React代码动态生成栅格布局的方法
2020/05/24 Javascript
javascript中layim之查找好友查找群组
2021/02/06 Javascript
[05:39]2014DOTA2国际邀请赛 DK晋级胜者组专访战队国士无双
2014/07/14 DOTA
[50:12]EG vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python3 XML 获取雅虎天气的实现方法
2018/02/01 Python
python和shell获取文本内容的方法
2018/06/05 Python
Python实现多进程的四种方式
2019/02/22 Python
TensorFlow2.0矩阵与向量的加减乘实例
2020/02/07 Python
Python3监控疫情的完整代码
2020/02/20 Python
Python趣味入门教程之循环语句while
2020/08/26 Python
python 实现音频叠加的示例
2020/10/29 Python
利用python如何实现猫捉老鼠小游戏
2020/12/04 Python
CSS3 :default伪类选择器使用简介
2018/03/15 HTML / CSS
世界上最大的折扣香水店:FragranceNet.com
2016/10/26 全球购物
中国领先的汽车保养服务平台:途虎养车
2019/10/18 全球购物
厂办主管岗位职责范本
2014/02/28 职场文书
城管综合整治方案
2014/05/01 职场文书
俞敏洪北大演讲稿
2014/05/22 职场文书
2014年驻村干部工作总结
2014/11/17 职场文书
如何才能写好调研报告?
2019/07/03 职场文书
Python 详解通过Scrapy框架实现爬取百度新冠疫情数据流程
2021/11/11 Python