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 使用form表单select类实现级联菜单效果
Dec 19 Javascript
jQuery$命名冲突怎么办如何解决
Jan 16 Javascript
javascript获取元素离文档各边距离的方法
Feb 13 Javascript
jQuery实现单击弹出Div层窗口效果(可关闭可拖动)
Sep 19 Javascript
Bootstrap Chart组件使用教程
Apr 28 Javascript
在Docker快速部署Node.js应用的详细步骤
Sep 02 Javascript
javascript显示系统当前时间代码
Dec 29 Javascript
写给小白看的JavaScript异步
Nov 29 Javascript
ES6 如何改变JS内置行为的代理与反射
Feb 11 Javascript
layui插件表单验证提交触发提交的例子
Sep 09 Javascript
JavaScript中如何对多维数组(矩阵)去重的实现
Dec 04 Javascript
node.js使用zlib模块进行数据压缩和解压操作示例
Feb 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
thinkPHP框架通过Redis实现增删改查操作的方法详解
2019/05/13 PHP
csdn 批量接受好友邀请
2009/02/19 Javascript
理解JavaScript变量作用域更轻松
2009/10/25 Javascript
jQuery对Select的操作大集合(收藏)
2013/12/28 Javascript
js实现俄罗斯方块小游戏分享
2014/01/31 Javascript
JavaScript实现向setTimeout执行代码传递参数的方法
2015/04/16 Javascript
jquery实现键盘左右翻页特效
2015/04/30 Javascript
jquery.validate使用详解
2016/06/02 Javascript
基于JavaScript实现树形下拉框
2016/08/10 Javascript
详解jQuery中的DOM操作
2016/12/23 Javascript
Javascript 一些需要注意的细节(必看篇)
2017/07/08 Javascript
webpack组织模块打包Library的原理及实现
2018/03/10 Javascript
解决vue axios的封装 请求状态的错误提示问题
2018/09/25 Javascript
webpack+vue-cli项目中引入外部非模块格式js的方法
2018/09/28 Javascript
在Vue中使用HOC模式的实现
2020/08/23 Javascript
vue 图片裁剪上传组件的实现
2020/11/12 Javascript
[28:05]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第一场 10月30日
2020/10/31 DOTA
Python创建模块及模块导入的方法
2015/05/27 Python
从局部变量和全局变量开始全面解析Python中变量的作用域
2016/06/16 Python
Python爬虫包 BeautifulSoup  递归抓取实例详解
2017/01/28 Python
Python+matplotlib+numpy实现在不同平面的二维条形图
2018/01/02 Python
Python学习笔记之列表和成员运算符及列表相关方法详解
2019/08/22 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
2020/02/17 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
2020/10/29 Python
HTML5 File API改善网页上传功能
2009/08/19 HTML / CSS
英国舒适型鞋履品牌:FitFlop
2017/05/17 全球购物
娇韵诗加拿大官网:Clarins加拿大
2017/11/20 全球购物
Airbnb爱彼迎官网:成为爱彼迎房东,赚取收入
2019/03/14 全球购物
Pamela Love官网:纽约设计师Pamela Love的精美、时尚和穿孔珠宝
2020/10/19 全球购物
为什么要优先使用同步代码块而不是同步方法?
2013/01/30 面试题
幼儿园教师工作感言
2014/02/15 职场文书
民族精神月活动总结
2014/08/28 职场文书
《周恩来的四个昼夜》观后思想汇报范文两篇
2014/09/10 职场文书
怒海潜将观后感
2015/06/11 职场文书
妇联2016年六一国际儿童节活动总结
2016/04/06 职场文书
Goland使用Go Modules创建/管理项目的操作
2021/05/06 Golang