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 相关文章推荐
bootstrap data与jquery .data
Jul 07 Javascript
jQuery根据ID获取input、checkbox、radio、select的示例
Aug 11 Javascript
JS去除iframe滚动条的方法
Apr 01 Javascript
JQuery中DOM事件冒泡实例分析
Jun 13 Javascript
javascript排序函数实现数字排序
Jun 26 Javascript
AngularJS  $on、$emit和$broadcast的使用
Sep 05 Javascript
详解如何在React组件“外”使用父组件的Props
Jan 12 Javascript
javascript实现文件拖拽事件
Mar 29 Javascript
原生js实现淘宝放大镜效果
Oct 28 Javascript
vue日历/日程提醒/html5本地缓存功能
Sep 02 Javascript
vue实现简单数据双向绑定
Apr 28 Vue.js
JavaScript模拟实现网易云轮播效果
Apr 04 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中ob(Output Buffer 输出缓冲)函数使用方法
2007/07/21 PHP
php array_map array_multisort 高效处理多维数组排序
2009/06/11 PHP
Zend的Registry机制的使用说明
2013/05/02 PHP
PHP数组游标实现对数组的各种操作详解
2016/01/26 PHP
js tab效果的实现代码
2009/12/26 Javascript
jQuery为iframe的body添加click事件的实现代码
2011/04/07 Javascript
基于jquery的大众点评,分类导航实现代码
2011/08/23 Javascript
jquery.mobile 共同布局遇到的问题小结
2015/02/10 Javascript
JavaScript实现带缓冲效果的随屏滚动漂浮广告代码
2015/11/06 Javascript
ionic进入多级目录后隐藏底部导航栏(tabs)的完美解决方案
2016/11/23 Javascript
jQuery加载及解析XML文件的方法实例分析
2017/01/22 Javascript
JS实现简易刻度时钟示例代码
2017/03/11 Javascript
React学习笔记之条件渲染(一)
2017/07/02 Javascript
JavaScript实现动态添加Form表单元素的方法示例
2017/08/14 Javascript
JS自定义函数实现时间戳转换成date的方法示例
2017/08/27 Javascript
js使用html2canvas实现屏幕截取的示例代码
2017/08/28 Javascript
浅谈js闭包理解
2019/03/28 Javascript
vue实现鼠标移过出现下拉二级菜单功能
2019/12/12 Javascript
vue3.0封装轮播图组件的步骤
2021/03/04 Vue.js
Python字符串处理之count()方法的使用
2015/05/18 Python
解决python爬虫中有中文的url问题
2018/05/11 Python
实例讲解Python中整数的最大值输出
2019/03/17 Python
django admin 自定义替换change页面模板的方法
2019/08/23 Python
Python3利用openpyxl读写Excel文件的方法实例
2021/02/03 Python
德国宠物用品、宠物食品及水族馆网上商店:ZooRoyal
2017/07/09 全球购物
中专生职业生涯规划书范文
2013/12/29 职场文书
2014年迎新年联欢会活动策划方案
2014/02/26 职场文书
舞蹈专业求职信
2014/06/13 职场文书
安全隐患整改报告
2014/11/06 职场文书
2015中学政教处工作总结
2015/07/22 职场文书
市级三好生竞选稿
2015/11/21 职场文书
vue-cropper组件实现图片切割上传
2021/05/27 Vue.js
Redisson实现Redis分布式锁的几种方式
2021/08/07 Redis
JavaScript流程控制(循环)
2021/12/06 Javascript
SQL注入篇学习之盲注/宽字节注入
2022/03/03 MySQL
css清除浮动clearfix:after的用法详解(附完整代码)
2023/05/21 HTML / CSS