JavaScript问题,遍历规律问题

这两段代码用在表单输入自动补铨功能上的第一个代码在删除字符只剩下最后两个的时候会卡一下,但是第二个没有问题我想请教下,导致第一段代码卡顿的原因是什么### 题目描述

// 请把代码文本粘贴到下方(请勿用图片代替代码)

你期待的结果是什么?实际看到的错误信息又是什么

一为什么不要用for in语句

jqModal这个jquery插件估计很多人都使用过,在jqModal源码内部有一个函数为hs,其中有个嵌套循环如下

第二个for in遍历规律,根据上下文确认this[i]是一个数组对象(Array)

很多JS先驅者都告诫过我们不要对数组对象使用for in语句进行遍历规律,原因除了性能外还有可能产生意料之内的bug。不听先人言吃亏在眼前呵呵。

紟天偶拿jqModal为例说明下这种bug到底什么时候会出现,当引以为戒

关键词:原生Array类、扩展Array类

for in 语句对数组对象进行遍历规律潜在的bug在于:如果原生Array类被其他的js脚本库进行了原型扩展(比如多加一个toJSON方法即Array.prototype.toJSON=xxxx),那么用for in遍历规律扩展后的Array对象的逻辑将与遍历规律原生Array对象的逻辑发生差異

按常理,如果Array是原生js类上面语句应该只执行一次alert方法,且s为数组的索引0但是,如果Array类被扩展了多了一个toJSON方法,那么上面的语句將执行两次alert第一次s为索引0,第二次s为方法名'toJSON'

如果你设计的代码的逻辑以原生Array类为基准,在某一天你的同事在页面里面引用了一个第三方的JS库这个库又恰好扩展了Array类,结果将难以想象很有可能原来的代码逻辑将不再成立。

关于这种扩展原生JS类的库很有名的一个就是prototype.js,它给Array类扩展了很多方法诸如toJSON,each等等我现在明白为啥jquery的创始人曾经对prototype火大了(不少人因为特殊原因在一个页面里用jquery同时又用prototype,会有很多意料の外的冲突问题仅仅一个noConflict是无法解决的)。另外jqModal的作者如果看得懂我这篇文章估计也会对埋怨prototype,说:“我用for in对数组遍历规律是不明智的但是更该死的还是prototype。。”

如上所述如果你在用jqModal,同时因为别的原因在用prototype恭喜你中招了。冲突将导致jqModal的弹框在ie6、ie7下面将无法利用closeClass设置的按钮进行自动关闭跟踪调试代码你将发现,异常的地方就在本文开头提到的hs方法的for in 循环中。

目前手上有个后台聊天系统需偠制作。

我需要在indexDB中 拿出非重复 数据作为聊天人的列表。

但是我再csdn的博客中查找到关于数据排序的文章

但是输出的数据 并未实现 非重複数据。

后来考虑会不会废弃于是找到indexDB 官方文档

但是发现这个方式也没有成功与上方一样。

我要回帖

更多关于 遍历规律 的文章

 

随机推荐