IE8对JS通过属性和数组遍历解析不一样的地方探讨
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数组遍历for与for in区别详解
js中遍历数组的有两种方式 复制代码 代码如下: var array=['a'] //标准的for循环 for(var i=1;i<array.length;i++){ alert(array[i]) } //foreach循环 for(var i in array){ alert(array[i]) } 正常情况下上面两种遍历数组的方式结果一样.首先说两者的第一个区别 标准的for循环中的i是number类型,表示的是数组的下标,但是foreach循环中的i表示的是数组的key
-
js数组循环遍历数组内所有元素的方法
例,for(){}遍历数组 复制代码 代码如下: <script type="text/javascript"> <!--var arr = new Array(13.5,3,4,5,6);for(var i=0;i<arr.length;i++){ arr[i] = arr[i]/2.0;}alert(arr); //--> </script> 例,for in循环遍历数组 复制代码 代码如下: <html><body>
-
JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍
•原理: •高级浏览器支持forEach方法 语法:forEach和map都支持2个参数:一个是回调函数(item,index,list)和上下文: •forEach:用来遍历数组中的每一项:这个方法执行是没有返回值的,对原来数组也没有影响: •数组中有几项,那么传递进去的匿名回调函数就需要执行几次: •每一次执行匿名函数的时候,还给其传递了三个参数值:数组中的当前项item,当前项的索引index,原始数组input: •理论上这个方法是没有返回值的,仅仅是遍历数组中的每一项,不对原来数组进行
-
Javascript技巧之不要用for in语句对数组进行遍历
一,为什么不要用for in语句 jqModal这个jquery插件估计很多人都使用过,在jqModal源码内部,有一个函数为hs,其中有个嵌套循环如下, 复制代码 代码如下: for(var i in {jqmShow:1,jqmHide:1}) for(var s in this[i]) if(H[this[i][s]]) H[this[i][s]].w[i](this); return F; } 第一个for in遍历的目标是个匿名对象,没有问题. 第二个for in遍历,根据上下文确认t
-
Javascript的数组与字典用法与遍历对象的属性技巧
Javascript 的数组Array,既是一个数组,也是一个字典(Dictionary).先举例看看数组的用法. 复制代码 代码如下: var a = new Array(); a[0] = "Acer"; a[1] = "Dell"; for (var i = 0; i < a.length; i++) { alert(a[i]); } 下面再看一下字典的用法. 复制代码 代码如下: var computer_price = new Array(); co
-
JS简单循环遍历json数组的方法
本文实例讲述了JS简单循环遍历json数组的方法.分享给大家供大家参考,具体如下: 例如数据库里面的json字符串是这样的 var str = '[{"name":"宗2瓜","num":"1","price":"122"},{"name":"宗呱呱","num":"1","price":
-
jquery遍历筛选数组的几种方法和遍历解析json对象
jquery grep()筛选遍历数组 复制代码 代码如下: $().ready( function(){ var array = [1,2,3,4,5,6,7,8,9]; var filterarray = $.grep(array,function(value){ return value > 5;//筛选出大于5的 }); for(var i=0;i<filterarray.length;i++){ alert(filterarray[i]); } for (key in filtera
-
JS数组的遍历方式for循环与for...in
JS数组的遍历方法有两种: 第一种:一般的for循环,例如: var a = new Array("first", "second", "third") for(var i = 0;i < a.length; i++) { document.write(a[i]+","); } 输出的结果:fitst,second,third 第一种:用for...in 这种遍历的方式,例如: var arr = new Array(&
-
详解JS中遍历语法的比较
for循环 JavaScript 提供多种遍历语法.最原始的写法就是for循环. let arr = [1,2,3,4,5]; for (var index = 0; index < arr.length; index++) { console.log(myArray[index]); // 1 2 3 4 5 } 缺点:这种写法比较麻烦 forEach 数组提供内置的forEach方法 let arr = [1,2,3,4,5]; arr.forEach((element,index) =>
-
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
废话不多说了,直奔主题,你,具体代码如下所示: <script> //----------------for用来遍历数组对象-- var i,myArr = [1,2,3]; for (var i = 0; i < myArr.length; i++) { console.log(i+":"+myArr[i]); }; //---------for-in 用来遍历非数组对象 var man ={hands:2,legs:2,heads:1}; //为所有的对象添加cl
-
JavaScript使用forEach()与jQuery使用each遍历数组时return false 的区别
原生js使用forEach()与jquery使用each()遍历数组,return false 的区别: 1.使用each()遍历数组a,如下: var a=[20,21,22,23,24]; $.each(a, function(index,val) { console.log('index='+index); if(index==2){ return false; } console.log('val='+val); }); 结果如下: 从运行的效果可以看出,return 相当于循环中的br
随机推荐
- iOS缓存文件大小显示功能和一键清理功能的实现方法
- iOS发送验证码倒计时应用
- 值得分享的Bootstrap Ace模板实现菜单和Tab页效果
- C语言关系运算符实例详解
- JS实现鼠标经过好友列表中的好友头像时显示资料卡的效果
- 浅谈Javascript线程及定时机制
- asp.net core mvc实现文件上传实例
- SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
- python定时检查启动某个exe程序适合检测exe是否挂了
- jquery tools系列 overlay 学习第1/2页
- 捕捉并保存ASP运行错误的函数代码
- Linux链接命令的实例详解
- 漂亮MM vs 普通MM 幸福
- CMD命令行下修改网络IP设置的方法
- 比较彻底的解决方法无法显示隐藏文件夹"修改过注册表也无效"的解决方法
- jQuery each()小议
- jQuery阻止事件冒泡具体实现
- 如何防止INPUT按回车自动提交表单FORM
- C语言嵌入informix基础入门示例讲解
- java使用正则表达为数字添加千位符的简单方法