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 相关文章推荐
jquery中eq和get的区别与使用方法
Apr 14 Javascript
js出生日期 年月日级联菜单示例代码
Jan 10 Javascript
js阻止默认事件与js阻止事件冒泡示例分享 js阻止冒泡事件
Jan 27 Javascript
jquery对象和javascript对象即DOM对象相互转换
Aug 07 Javascript
JavaScript中匿名、命名函数的性能测试
Sep 04 Javascript
JS交换变量的方法
Jan 21 Javascript
VUEJS实战之构建基础并渲染出列表(1)
Jun 13 Javascript
BootStrap Validator 版本差异问题导致的submitHandler失效问题的解决方法
Dec 01 Javascript
基于Vue过渡状态实例讲解
Sep 14 Javascript
在Vue中使用highCharts绘制3d饼图的方法
Feb 08 Javascript
react-native使用leanclound消息推送的方法
Aug 06 Javascript
vue中keep-alive内置组件缓存的实例代码
Apr 16 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设计模式 DAO(数据访问对象模式)
2011/06/26 PHP
php中判断文件存在是用file_exists还是is_file的整理
2012/09/12 PHP
php表单提交实例讲解
2015/11/12 PHP
php使用curl实现ftp文件下载功能
2017/05/16 PHP
JavaScript延迟加载
2021/03/09 Javascript
修改jQuery.Autocomplete插件 支持中文输入法 避免TAB、ENTER键失效、导致表单提交
2009/10/11 Javascript
jQuery each()小议
2010/03/18 Javascript
jquery+css+ul模拟列表菜单具体实现思路
2013/04/15 Javascript
JS操作图片(增,删,改) 例子
2013/04/17 Javascript
JavaScript地图拖动功能SpryMap的简单实现
2013/07/17 Javascript
js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
2015/02/11 Javascript
jQuery与getJson结合的用法实例
2015/08/07 Javascript
深入理解JS函数的参数(arguments)的使用
2016/05/28 Javascript
利用Javascript实现BMI计算器
2016/08/16 Javascript
深入学习nodejs中的async模块的使用方法
2017/07/12 NodeJs
js自定义trim函数实现删除两端空格功能
2018/02/09 Javascript
vue2实现搜索结果中的搜索关键字高亮的代码
2018/08/29 Javascript
vue中 数字相加为字串转化为数值的例子
2019/11/07 Javascript
vue实现可移动的悬浮按钮
2021/03/04 Vue.js
[02:52]2017DOTA2国际邀请赛中国区预选赛晋级之路
2017/07/03 DOTA
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS TNC
2018/03/30 DOTA
[02:22]2018DOTA2亚洲邀请赛VG赛前采访
2018/04/03 DOTA
python简单分割文件的方法
2015/07/30 Python
Python生成密码库功能示例
2017/05/23 Python
python 读取文件并替换字段的实例
2018/07/12 Python
python 密码学示例——理解哈希(Hash)算法
2020/09/21 Python
详解python的变量缓存机制
2021/01/24 Python
Michael Kors美国官网:美式奢侈生活风格的代表
2016/11/25 全球购物
安全的后院和健身蹦床:JumpSport
2019/07/15 全球购物
Linux如何压缩可执行文件
2014/03/27 面试题
幼儿园教师请假制度
2014/01/16 职场文书
年会搞笑主持词
2014/03/27 职场文书
房屋转让协议书
2014/04/11 职场文书
2014年新农村建设工作总结
2014/12/01 职场文书
爱晚亭导游词
2015/02/09 职场文书
八一建军节主持词
2015/07/01 职场文书