javascript用于循环时需要注意的问题——问题总结
如果您想一遍又一遍地用不同的值运行相同的代码,那么使用循环是很方便的。
很多时候我们使用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。
版权声明:javascript用于循环时需要注意的问题——问题总结是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。