记录一下js中的for/for..in,以及早期IE浏览器对于实现中存在的bug现象
来源:互联网 发布:淘宝黑科技产品 编辑:程序博客网 时间:2024/04/28 22:02
修正一下自己的一个很简单的认知错误。一直认为for和for in应该是结果一样,甚至觉得for in是for的简便写法。于是栽进了个很简单的坑
例如随手百度了一下栗子:
var array=[1,2,3,4,5];//定义一个数组,实现数组元素的遍历。//用For...in实现for(var i in array){ alert(array[i]);//数组的元素}//用for循环实现for(var i=0;i<array.length;i++){ alert(array[i]);//数组的元素}
然后在集合中的对象就遇到了问题,毕竟object对象没有.length,所以对于对象的属性操作就要用for..in,而对于比如数组的元素之类的,最好用for。参考一下链接:http://www.jb51.net/article/46953.htm
翻阅了下资料,不得不说一个兼容性的问题,for-in循环时,返回的是所有能够通过对象访问的、可枚举的属性,其中既包括存在于实例中的属性,也包含原型中的属性。然而在IE8甚至更前的IE浏览器中,存在屏蔽不可枚举属性的实例属性的问题。例如下一段摘抄于《javascript高级程序设计》中的一段代码:
var o={name:"Daisy",toString:function(){return "My Object";}};for(var prop in o){if(prop=="toString"){alert("Found toString");}}正常运行的话,是会弹出Found toString提示框的,但是正因为老版本的IE中屏蔽了,就跳过该属性,不会弹出。该bug会影响默认不可枚举的所有属性和方法:包括:hashOwnProperty()、propertyIsEnumerable()、toLocaleString()、toString()和valueOf().
例外除了for..in,还可以用Object.keys()方法取得所有可枚举的实例属性。用Object.getOwnPropertyNames()可以获得所有包括不可枚举的实例属性。
0 0
- 记录一下js中的for/for..in,以及早期IE浏览器对于实现中存在的bug现象
- IE中的for...in... Bug
- js的中for in
- IE浏览器存在的setAttribute bug
- js for in浏览器兼容问题
- 非IE浏览器中js使用中文标识符的bug
- js中for in
- js中for in 和 for each in的使用
- IE中的cursor存在的bug
- IE不支持js的checkbox遍历使用for in语法
- 用for in实现js的反射
- 对于IE浏览器中的HasLayout的认识
- js中的for和for-in
- js中for in的用法
- 在js中for in的用法
- js中for in的用法解析
- js 中for in的用法
- 在js中for in的用法
- 基于Dubbo框架构建分布式服务
- DataTable转Json格式
- 象棋问题
- python 数组 中文
- 十、从头到尾彻底理解傅里叶变换算法、下
- 记录一下js中的for/for..in,以及早期IE浏览器对于实现中存在的bug现象
- activity生命周期问题,两个activity之间跳转的onstop和ondestroy
- AndroidStudio导入项目一直卡在Building gradle project info最快速解决方案
- 使用ntpdate校正linux系统的时间
- 程序员必知的8大排序3大查找(二)
- LeetCode 70. Climbing Stairs
- 精通八大排序算法系列:二、堆排序算法
- React native真机调试
- IOS点击键盘以外空白区域隐藏键盘的4种常见写法