宝哥软件园

javascript用于循环时需要注意的问题——问题总结

编辑:宝哥软件园 来源:互联网 时间:2021-09-08

如果您想一遍又一遍地用不同的值运行相同的代码,那么使用循环是很方便的。

很多时候我们使用for循环,使用for循环的部门经常循环一个数组,我们经常这样写:

//下一个最佳循环为(var I=0;我的数组长度;I) {//用myarray[i]做点什么}虽然这段代码没有什么问题,但是每次循环都会得到数组的长度,这样会减少代码量,尤其是myarray不是数组而是一个HTMLCollection对象的时候。

再看看下面的代码:

for (var i=0,max=myarray.length我最大;I) {//用myarray[i]做点什么}这段代码只得到数组的长度一次,提高了代码的质量。

使用单一var形式,您可以从循环中取出变量,如下所示:

function looper() { var i=0,max,my array=[];//.for (i=0,max=myarray.length我最大;I) {//对myarray[i]}}做点什么当}}javascript用于循环时的问题总结

这个问题的讨论原本来自公司内部邮件,我只是记录了这个问题的讨论内容。

有项目组发现,在使用“for(数组中的x)”时,IE浏览器中出现了x的意外值。

特别是如果Array.prototype.indexOf方法是定制的(比如由于一些原型污染),可能是因为旧版本的IE浏览器不支持array . prototype . indexof方法,开发人员非常想使用,那么这样的浏览器可能会出现这样的问题:

array . prototype . indexof=function(){ 0.};var arr=[1,2];for(arr中的x)console . log(x);//将输出

12function(){…}换句话说,方法indexOf是输出。

解决方法很简单,要么不加这个方法,要么用" for(I=0;i array.length我)”这样的循环等等。

但问题的本质是什么?有人推测可能是因为for(obj中的x)的用法实际上是遍历一个对象,而array的实现实际上与普通对象是一致的,只是key是一个给定值:

{0: '某物',1: '其他某物' }在stackoverflow问答中也提到,遍历数组时,使用for…in和for(;),前者的意思是列举对象的属性,并且有两个问题:

枚举顺序无法保证;

继承的属性也被枚举;

在Array.prototype.forEach的支持下,从这个表中可以清楚地看到,IE8及以下不能被准确地支持:

还有对forEach方法兼容性的详细描述。事实上,主要的JavaScript框架(如jQuery、下划线、Prototype等。)具有安全和通用的for-one功能。

在JSLint的for in一章中,还提到for in语句允许循环访问对象的属性名,但是它也将遍历通过原型链继承的属性,这在许多情况下会导致意外的错误。有一个粗略的解决方案:

For(对象中的名称){if(对象。hasown property(name)){ 0.}}其他人提到了for的用法(var I=0;ilengthI)循环中出现这样的问题,因为JavaScript在代码块级别没有变量,所以这里I的访问权限实际上是它的方法。有些书建议程序员把这样的变量声明放在一个地方,但直觉上讲,大多数情况下不够合理。

使用JavaScript 1.7中引入的“let”可以解决这个问题,并使我成为一个真正的代码块级变量:

for(设I=0;一.长度;I)最后,谷歌的JavaScript风格指南中也涉及到了这个约束:

For-in循环:仅用于迭代对象/映射/哈希中的键。以上就是javascript用于循环时应该注意的问题。问题总结的全部内容附后。希望对以后的工作和学习有所帮助。同时,欢迎业内人士提出批评和建议。

更多信息见本文://www . JB 51 . net/article/80351 . htm。

更多资讯
游戏推荐
更多+