扩展Array.prototype.indexOf引发的问题
来源:互联网 发布:苹果摄影软件 编辑:程序博客网 时间:2024/06/13 02:51
Array没有indexOf方法,这样在一个数组中查找某个元素的索引时比较麻烦,为了调用方便,于是通过prototype原型扩展了Array.prototype.indexOf(),这样用起来就比较方便了。
用的时候直接
扩展了以后,用起来很爽很方便,一片和谐景象...
但是某次是遍历数组元素的时候,使用for..in..循环,引发了其他的问题,打破了这个和谐的氛围。
本来想输出这四个人的名字,结果输出的是什么呢?
输出的居然是:
除了把名字打出来以外,还额外输出了自己扩展的方法indexOf,但是令人疯狂的是,firefox却是“正常”的,只有四个人的人名,为什么会这样?
输出indexOf,自己扩展的,可以理解,毕竟for..in是遍历一个对象的所有用户定义的属性或者一个数组的所有元素。
那么firefox为什么不会?
后来查了资料才明白,
Array在javascript1.6版本已经支持Array.indexOf(),而我用的firefox是3.5版本,已经支持javascript1.8了,indexOf是其Array本身固有的方法了。
而IE,即使我用的是IE8,也才支持到javascript1.3版本。
所以IE8认为indexOf是“用户定义的属性”,而firefox认为是自己原生支持的固有的属性。
真的是这样吗?
做个实验,把indexOf更名为myIndexOf,再试试,结果IE和firefox都输出myIndexOf,证明前面的观点是正确。
那么又来了个问题,我扩展indexOf很久了,现在不少项目的代码都已经在使用这个方法,而现在我非要使用for..in输出数组本身的元素,不要其他我自己扩展到俄方法,怎么办?
好在javascript提供了hasOwnProperty方法。
看一下其描述:
Every object descended from Object
inherits the hasOwnProperty
method. This method can be used to determine whether an object has the specified property as a direct property of that object; unlike the in
operator, this method does not check down the object's prototype chain
看描述,就是我们想要的东西。
在for...in..里做个 判断就OK了
另外,附上hasOwnProperty用法示例,来源于互联网:
查看浏览器支持javascript到哪个版本:
- 扩展Array.prototype.indexOf引发的问题
- Array.IndexOf的性能问题
- Array对象的方法实现(6)----Array.prototype.indexOf(实现常规参数的功能)
- 数组Array进行原型prototype扩展后带来的for in遍历问题
- 对数组Array进行原型prototype扩展后带来的for in遍历问题
- js Array.prototype.indexOf 获取元素在数组中的index
- prototype.js的扩展
- Flex中 Array 的IndexOf 的作用
- JavaScript Array对象indexOf()方法的实现
- JS——实现的Array indexOf
- Array.prototype.filter()的实现
- Array.prototype.map()的用法
- 由substr()引发的,substring ,substr,split ,indexof
- js构造函数原型(prototype)问题分析(一段烂代码引发的博客)
- Javascript prototype 的一些扩展
- Array.prototype
- Array.IndexOf performance caveat
- js string 的startwiths函数 以及 Array的indexOf函数
- qt中关于文件的操作
- 我的七个建议
- 学习杂记
- 珠海哪里的奶茶好喝的?
- 从用户角度感受IE 8和Firefox的区别
- 扩展Array.prototype.indexOf引发的问题
- 关于dll出现断言错误的问题
- Logger class
- 用QT 的QPalette来改变窗体的外观
- 直接修改页面上的样式用li 例子 js另类分页 js分页 javascript
- nysql collation
- C#网络通信(2)--TCP编程和多线程
- 百度技术牛人谈大学生择业要诀:首选龙头企业
- 世界五百强面试题目及应答评点 (一)