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 相关文章推荐
ext form 表单提交数据的方法小结
Aug 08 Javascript
input输入框的自动匹配(原生代码)
Mar 19 Javascript
js 表单提交后按钮变灰的实例代码
Aug 16 Javascript
JS图片自动轮换效果实现思路附截图
Apr 30 Javascript
一个支付页面DEMO附截图
Jul 22 Javascript
浅谈JavaScript 中有关时间对象的方法
Aug 15 Javascript
基于Two.js实现星球环绕动画效果的示例
Nov 06 Javascript
Vue下拉框回显并默认选中随机问题
Sep 06 Javascript
JSON字符串操作移除空串更改key/value的介绍
Jan 05 Javascript
JavaScript 实现拖拽效果组件功能(兼容移动端)
Nov 11 Javascript
JS创建自定义对象的六种方法总结
Dec 15 Javascript
JavaScript架构localStorage特殊场景下二次封装操作
Jun 21 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模板的朋友必看的很多个顶级PHP模板引擎比较分析
2008/05/26 PHP
php 随机数的产生、页面跳转、件读写、文件重命名、switch语句
2009/08/07 PHP
php checkbox复选框值的获取与checkbox默认值输出方法
2010/05/15 PHP
PHP多个图片压缩成ZIP的方法
2020/08/18 PHP
php使用QueryList轻松采集js动态渲染页面方法
2018/09/11 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
2019/10/15 PHP
SUN的《AJAX与J2EE》全文译了
2007/02/23 Javascript
JS URL传中文参数引发的乱码问题
2009/09/02 Javascript
jQuery遍历页面所有CheckBox查看是否被选中的方法
2015/04/14 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
2016/03/28 Javascript
JavaScript实现复制内容到粘贴板代码
2016/03/31 Javascript
EasyUI布局 高度自适应
2016/06/04 Javascript
RGB和YUV 多媒体编程基础详细介绍
2016/11/04 Javascript
深入浅析Node.js 事件循环、定时器和process.nextTick()
2018/10/22 Javascript
使用zrender.js绘制体温单效果
2019/10/31 Javascript
python定时采集摄像头图像上传ftp服务器功能实现
2013/12/23 Python
Python类的专用方法实例分析
2015/01/09 Python
python通过ftplib登录到ftp服务器的方法
2015/05/08 Python
Python实现配置文件备份的方法
2015/07/30 Python
Python脚本处理空格的方法
2016/08/08 Python
python中pylint使用方法(pylint代码检查)
2018/04/06 Python
对django layer弹窗组件的使用详解
2019/08/31 Python
python异步编程 使用yield from过程解析
2019/09/25 Python
python 中的paramiko模块简介及安装过程
2020/02/29 Python
TensorFlow使用Graph的基本操作的实现
2020/04/22 Python
10行Python代码实现Web自动化管控的示例代码
2020/08/14 Python
受希腊女神灵感的晚礼服、鸡尾酒礼服和婚纱:THEIA
2018/04/15 全球购物
实习心得体会
2014/01/02 职场文书
《风筝》教学反思
2014/04/10 职场文书
讲解员培训方案
2014/05/04 职场文书
主要领导对照检查材料
2014/08/26 职场文书
个人委托书范本
2014/09/13 职场文书
学校联谊协议书
2014/09/16 职场文书
2015年七年级班主任工作总结
2015/05/21 职场文书
抢劫罪辩护词
2015/05/21 职场文书
2016年学校十一国庆节活动总结
2016/04/01 职场文书