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 相关文章推荐
Jquery 最近浏览过的商品的功能实现代码
May 14 Javascript
JavaScript实现拼音排序的方法
Nov 20 Javascript
javascript跑马灯悬停放大效果实现代码
Dec 12 Javascript
JS根据变量保存方法名并执行方法示例
Apr 04 Javascript
网页右侧悬浮滚动在线qq客服代码示例
Apr 28 Javascript
node.js中的path.join方法使用说明
Dec 08 Javascript
javascript将数字转换整数金额大写的方法
Jan 27 Javascript
用v-html解决Vue.js渲染中html标签不被解析的问题
Dec 14 Javascript
详解jQuery uploadify文件上传插件的使用方法
Dec 16 Javascript
详解vue项目的构建,打包,发布全过程
Nov 23 Javascript
详解react组件通讯方式(多种)
May 06 Javascript
JavaScript实现一键复制内容剪贴板
Jul 23 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中通过curl smtp发送邮件
2012/06/05 PHP
PHP防止图片盗用(盗链)的方法小结
2016/11/11 PHP
基于jquery自定义的漂亮单选按钮RadioButton
2013/11/19 Javascript
JS实现的倒计时效果实例(2则实例)
2015/12/23 Javascript
深入分析node.js的异步API和其局限性
2016/09/05 Javascript
javascript实现的左右无缝滚动效果
2016/09/19 Javascript
类似于QQ的右滑删除效果的实现方法
2016/10/16 Javascript
js实现用户输入的小写字母自动转大写字母的方法
2017/01/21 Javascript
loading动画特效小结
2017/01/22 Javascript
BootStrap select2 动态改变值的方法
2017/02/10 Javascript
详解webpack 如何集成第三方js库
2017/06/29 Javascript
vue与TypeScript集成配置最简教程(推荐)
2017/10/17 Javascript
开发Vue树形组件的示例代码
2017/12/21 Javascript
react-router browserHistory刷新页面404问题解决方法
2017/12/29 Javascript
JavaScript中变量、指针和引用功能与操作示例
2018/08/04 Javascript
详解如何在webpack中做预渲染降低首屏空白时间
2018/08/22 Javascript
微信小程序冒泡事件及其阻止方法实例分析
2018/12/06 Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
2020/09/21 Javascript
[40:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs TNC
2018/04/01 DOTA
python 自动提交和抓取网页
2009/07/13 Python
Python实现读取并保存文件的类
2017/05/11 Python
Java分治归并排序算法实例详解
2017/12/12 Python
Python实现获取邮箱内容并解析的方法示例
2018/06/16 Python
mvc框架打造笔记之wsgi协议的优缺点以及接口实现
2018/08/01 Python
Python爬虫实战之12306抢票开源
2019/01/24 Python
css和css3弹性盒模型实现元素宽度(高度)自适应
2019/05/15 HTML / CSS
英语专业学生个人求职信范文
2014/01/06 职场文书
单身联谊活动方案
2014/01/29 职场文书
2014年清明节网上祭英烈寄语
2014/04/09 职场文书
党在我心中演讲稿
2014/09/02 职场文书
学校运动会广播稿100条
2014/09/14 职场文书
2015年班干部工作总结
2015/04/29 职场文书
高三英语教学反思
2016/03/03 职场文书
python - asyncio异步编程
2021/04/06 Python
Redis集群新增、删除节点以及动态增加内存的方法
2021/09/04 Redis
springboot为异步任务规划自定义线程池的实现
2022/06/14 Java/Android