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渐显(fadeIn)渐隐(fadeOut)类
Jun 19 Javascript
JavaScript数组去重的五种方法
Nov 05 Javascript
jQuery调用Webservice传递json数组的方法
Aug 06 Javascript
实例解析Array和String方法
Dec 14 Javascript
Angular ui.bootstrap.pagination分页
Jan 20 Javascript
js使用generator函数同步执行ajax任务
Sep 05 Javascript
vue-cli项目中怎么使用mock数据
Sep 27 Javascript
9102年webpack4搭建vue项目的方法步骤
Feb 20 Javascript
基于JS实现前端压缩上传图片的实例代码
May 14 Javascript
一文了解vue-router之hash模式和history模式
May 31 Javascript
vue页面更新patch的实现示例
Mar 25 Javascript
jQuery冲突问题解决方法
Jan 19 jQuery
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
PHP5中MVC结构学习
2006/10/09 PHP
php 无法载入mysql扩展
2010/03/12 PHP
php中base_convert()进制数字转换函数实例
2014/11/20 PHP
JavaScript confirm选择判断
2008/10/18 Javascript
使用JavaScript switch case 另类写法
2010/03/14 Javascript
Javascript面象对象成员、共享成员变量实验
2010/11/19 Javascript
JavaScript 程序编码规范
2010/11/23 Javascript
JS构建页面的DOM节点结构的实现代码
2011/12/09 Javascript
Web跨浏览器进程通信(Web跨域)
2013/04/17 Javascript
jqGrid日期格式的判断示例代码(开始日期与结束日期)
2013/11/08 Javascript
jquery实现动态菜单的实例代码
2013/11/28 Javascript
js的hasownproperty使用示例
2014/03/02 Javascript
使用nodejs、Python写的一个简易HTTP静态文件服务器
2014/07/18 NodeJs
原生js与jQuery实现简单的tab切换特效对比
2015/07/30 Javascript
微信小程序实现流程进度的图样式功能
2018/01/16 Javascript
Angular CLI在Angular项目中如何使用scss详解
2018/04/10 Javascript
AngularJs用户输入动态模板XSS攻击示例详解
2018/04/21 Javascript
js中自定义react数据验证组件实例详解
2018/10/19 Javascript
js实现图片3D轮播效果
2019/09/21 Javascript
JavaScript多种图形实现代码实例
2020/06/28 Javascript
[02:27]2018DOTA2亚洲邀请赛赛前采访-OpTic
2018/04/03 DOTA
python应用程序在windows下不出现cmd窗口的办法
2014/05/29 Python
Python实现多行注释的另类方法
2014/08/22 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
2018/02/07 Python
python matlibplot绘制3D图形
2018/07/02 Python
python 读取文本文件的行数据,文件.splitlines()的方法
2018/07/12 Python
centos 安装Python3 及对应的pip教程详解
2019/06/28 Python
Python3 合并二叉树的实现
2019/09/30 Python
Python箱型图绘制与特征值获取过程解析
2019/10/22 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
2020/04/10 Python
TensorFlow的reshape操作 tf.reshape的实现
2020/04/19 Python
Melissa香港官网:MDreams
2016/07/01 全球购物
会议邀请函范文
2014/01/09 职场文书
2014教师“四风问题”对照检查材料思想汇报
2014/09/16 职场文书
乡镇干部党的群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
python中的装饰器该如何使用
2021/06/18 Python