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 相关文章推荐
js下弹出窗口的变通
Apr 18 Javascript
JavaScript 节点操作 以及DOMDocument属性和方法
Dec 06 Javascript
jQuery load方法用法集锦
Dec 06 Javascript
Javascript中innerHTML用法实例分析
Jan 12 Javascript
详谈jQuery操纵DOM元素属性 attr()和removeAtrr()方法
Jan 22 Javascript
javascript实现的登陆遮罩效果汇总
Nov 09 Javascript
基于JQuery的$.ajax方法进行异步请求导致页面闪烁的解决办法
May 10 Javascript
Bootstarp 基础教程之表单部分实例代码
Feb 03 Javascript
angularjs实现的前端分页控件示例
Feb 10 Javascript
JAVA中截取字符串substring用法详解
Apr 14 Javascript
Node.js中环境变量process.env的一些事详解
Oct 26 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
Nov 12 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
ftp类(myftp.php)
2006/10/09 PHP
Session保存到数据库的php类分享
2011/10/24 PHP
PHP生成唯一的促销/优惠/折扣码(附源码)
2012/12/28 PHP
PHP使用CURL_MULTI实现多线程采集的例子
2014/07/29 PHP
PHP编写daemon process 实例详解
2016/11/13 PHP
PHP常用函数之根据生日计算年龄功能示例
2019/10/21 PHP
php7 错误处理机制修改实例分析
2020/05/25 PHP
基于js与flash实现的网站flv视频播放插件代码
2014/10/14 Javascript
理解javascript中DOM事件
2015/12/25 Javascript
JS加载iFrame出现空白问题的解决办法
2016/05/13 Javascript
bootstrap table小案例
2016/10/21 Javascript
js调用刷新界面的几种方式
2017/05/03 Javascript
angular使用post、get向后台传参的问题实例
2017/05/27 Javascript
layer实现关闭弹出层刷新父界面功能详解
2017/11/15 Javascript
postman+json+springmvc测试批量添加实例
2018/03/31 Javascript
如何用input标签和jquery实现多图片的上传和回显功能
2018/05/16 jQuery
Vue axios设置访问基础路径方法
2018/09/19 Javascript
JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能分析
2019/03/06 Javascript
微信小程序后台持续定位功能使用详解
2019/08/23 Javascript
Vue中qs插件的使用详解
2020/02/07 Javascript
Angular+Ionic使用queryParams实现跳转页传值的方法
2020/09/05 Javascript
[03:26]《DAC最前线》之EG经理自述DOTA2经历
2015/02/02 DOTA
[01:11:27]2018DOTA2亚洲邀请赛小组赛 A组加赛 Newbee vs Optic
2018/04/03 DOTA
python学习数据结构实例代码
2015/05/11 Python
Python批量按比例缩小图片脚本分享
2015/05/21 Python
python 中random模块的常用方法总结
2017/07/08 Python
对python3中的RE(正则表达式)-详细总结
2019/07/23 Python
Django项目主urls导入应用中views的红线问题解决
2019/08/10 Python
Python控制鼠标键盘代码实例
2020/12/08 Python
超酷炫 CSS3垂直手风琴菜单
2016/06/28 HTML / CSS
银行实习人员自我鉴定
2013/09/22 职场文书
小学生关于梦想的演讲稿
2014/08/22 职场文书
2014年预备党员群众路线教育实践活动对照检查材料思想汇报
2014/10/02 职场文书
2015年学生会干事工作总结
2015/04/09 职场文书
大学入学感言
2015/08/01 职场文书
java executor包参数处理功能 
2022/02/15 Java/Android