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 相关文章推荐
Javascript实例教程(19) 使用HoTMetal(5)
Dec 23 Javascript
070823更新的一个[消息提示框]组件 兼容ie7
Aug 29 Javascript
jQuery选择器的工作原理和优化分析
Jul 25 Javascript
EASYUI TREEGRID异步加载数据实现方法
Aug 22 Javascript
alert中断settimeout计时功能
Jul 26 Javascript
jquery判断元素是否隐藏的多种方法
May 06 Javascript
JavaScript中eval函数的问题
Jan 31 Javascript
jQuery实现内容定时切换效果完整实例
Apr 06 Javascript
jQuery Ajax全解析
Feb 13 Javascript
layui实现数据分页功能(ajax异步)
Jul 27 Javascript
JS中比较两个Object数组是否相等方法实例
Nov 11 Javascript
Vue获取微博授权URL代码实例
Nov 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
ThinkPHP3.1基础知识快速入门
2014/06/19 PHP
PHP实现更新中间关联表数据的两种方法
2014/09/01 PHP
浅谈php和.net的区别
2014/09/28 PHP
PHP实现的memcache环形队列类实例
2015/07/28 PHP
JavaScript 调试器简介
2009/02/21 Javascript
从零开始学习jQuery (四) jQuery中操作元素的属性与样式
2011/02/23 Javascript
JSON格式化输出
2014/11/10 Javascript
js淡入淡出的图片轮播效果代码分享
2015/08/24 Javascript
详解AngularJS中自定义过滤器
2015/12/28 Javascript
Bootstrap每天必学之弹出框(Popover)插件
2016/04/25 Javascript
JQuery 在文档中查找指定name的元素并移除的实现方法
2016/05/19 Javascript
JavaScript获取IP获取的是IPV6 如何校验
2016/06/12 Javascript
解析浏览器端的AJAX缓存机制
2016/06/21 Javascript
jQuery插件passwordStrength密码强度指标详解
2016/06/24 Javascript
bootstrap table配置参数例子
2017/01/05 Javascript
vue-cli脚手架config目录下index.js配置文件的方法
2018/03/13 Javascript
[01:53]DOTA2超级联赛专访Zhou 五年职业青春成长
2013/05/29 DOTA
[01:33:07]VGJ.T vs Newbee Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
Python用模块pytz来转换时区
2016/08/19 Python
Python模拟用户登录验证
2017/09/11 Python
用Python写一个模拟qq聊天小程序的代码实例
2019/03/06 Python
使用Bazel编译TensorBoard教程
2020/02/15 Python
python使用nibabel和sitk读取保存nii.gz文件实例
2020/07/01 Python
用Python自动清理系统垃圾的实现
2021/01/18 Python
canvas烟花特效锦集
2018/01/17 HTML / CSS
Hanro官网:奢华男士和女士内衣、睡衣和家居服
2018/10/25 全球购物
惠普香港官方商店:HP香港
2019/04/30 全球购物
serialVersionUID具有什么样的特征
2014/02/20 面试题
校园报刊亭创业计划书
2014/01/02 职场文书
讲座主持词
2014/03/20 职场文书
小学生竞选班干部演讲稿
2014/04/24 职场文书
水电站项目建议书
2014/05/12 职场文书
2014年学校领导班子对照检查材料
2014/09/19 职场文书
2015教师见习期工作总结
2014/12/12 职场文书
感谢信
2019/04/11 职场文书
优秀范文:《但愿人长久》教学反思3篇
2019/10/24 职场文书