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的执行顺序 之实战篇
Mar 03 Javascript
jQuery事件处理的特征(事件命名机制)
Aug 23 Javascript
AngularJS基于ui-route实现深层路由的方法【路由嵌套】
Dec 14 Javascript
JS实现图片高斯模糊切换效果的焦点图实例
Jan 21 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
Feb 19 Javascript
React-Native中props具体使用详解
Sep 04 Javascript
基于vue.js实现的分页
Mar 13 Javascript
jQuery实现的简单对话框拖动功能示例
Jun 05 jQuery
使用iView Upload 组件实现手动上传图片的示例代码
Oct 01 Javascript
vue 实现微信浮标效果
Sep 01 Javascript
vue 返回上一页,页面样式错乱的解决
Nov 14 Javascript
KnockoutJS数组比较算法实例详解
Nov 25 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.ini中文版(1)
2006/10/09 PHP
PHP 组件化编程技巧
2009/06/06 PHP
PHP parse_url 一个好用的函数
2009/10/03 PHP
php printf输出格式使用说明
2010/12/05 PHP
ajax返回值中有回车换行、空格的解决方法分享
2013/10/24 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
2015/12/14 PHP
Codeigniter里的无刷新上传的实现代码
2019/04/14 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
如何让div span等元素能响应键盘事件操作指南
2012/11/13 Javascript
javascript操作excel生成报表示例
2014/05/08 Javascript
javascript事件冒泡实例分析
2015/05/13 Javascript
JS实现的自动打字效果示例
2017/03/10 Javascript
AngularJs 常用的过滤器
2017/05/15 Javascript
Angular 4依赖注入学习教程之ClassProvider的使用(三)
2017/06/04 Javascript
bootstrap daterangepicker汉化以及扩展功能
2017/06/15 Javascript
微信小程序 websocket 实现SpringMVC+Spring+Mybatis
2017/08/04 Javascript
TypeScript高级用法的知识点汇总
2019/12/17 Javascript
JsonServer安装及启动过程图解
2020/02/28 Javascript
vue实现下载文件流完整前后端代码
2020/11/17 Vue.js
[00:27]DOTA2荣耀之路2:Patience from zhou!
2018/05/24 DOTA
python实现的登陆Discuz!论坛通用代码分享
2014/07/11 Python
python自定义时钟类、定时任务类
2021/02/22 Python
Windows上安装tensorflow  详细教程(图文详解)
2020/02/04 Python
Python基于xlutils修改表格内容过程解析
2020/07/28 Python
详解css3自定义滚动条样式写法
2017/12/25 HTML / CSS
html5读取本地文件示例代码
2014/04/22 HTML / CSS
GC是什么?为什么要有GC?
2013/12/08 面试题
大学毕业生自荐书怎么写?
2014/01/06 职场文书
工程管理专业毕业生自荐信
2014/01/24 职场文书
棉花姑娘教学反思
2014/02/15 职场文书
财务人员个人工作总结
2015/02/27 职场文书
小学六一主持词开场白
2015/05/28 职场文书
工作证明书
2015/06/15 职场文书
升学宴家长致辞
2015/07/27 职场文书
大学生社区义工服务心得体会
2016/01/22 职场文书
MySQL触发器的使用
2021/05/24 MySQL