2012-04-03 148 views
1
if(childrens are present) { 

    while(childrens.length ! ==0) { 

      do something 

    } 
} 

// Execute this function fnName() 

我在这里的问题是越来越执行while条件,但是当长度变为零...它不出来......并执行fnName()虽然条件没有得到终止

+2

发布演示问题的“工作”代码,而不是伪代码。 – RobG 2012-04-03 10:49:23

+0

必须是'!=='。尝试< or > – kommradHomer 2012-04-03 10:50:10

回答

4

如果你实际上是从循环中的数组中删除孩子,那应该没问题,除了你在操作符上有间距错误;它应该是!==,不! ==

while(childrens.length !== 0) { 

注意,实际上从数组中删除的孩子,你必须使用数组赋值函数的方法之一,如popsplice。我的猜测是你没有这样做。

比较正常的事情通过数组做将循环,不变异是:

var index, len, child; 

for (index = 0, len = childrens.length; index < len; ++index) { 
    child = childrens[index]; 
    // Use `child` for each child 
} 

或者使用新的ES5的东西像forEach(需要知道你的用户将有非常新TO-最新的浏览器,或包括“ES5垫片”,因为forEach是可以匀的东西)之一:

childrens.forEach(function(child) { 
    // Use `child` for each child 
}); 

边注:“孩子们”字已经一个复数(单数是“孩子”),所以在它的结尾没有“s”。只是英语中的一个不规则复数(有几个)。

+0

FWIW,'while(ar.length!== 0);'实际上是'SyntaxError',而不是无限循环! – Matt 2012-04-03 10:54:57

+1

@Matt:的确如此。我只是说,其他的错字... – 2012-04-03 11:04:47

1

对于检查不等于零它应该是

children.length != 0 // (you have written in the question children.length ! ==0) 

如果这是一个错字,另一个问题可能是你没有递减while循环中的子项。因此,它走向了一个无限循环。

2

通常的策略是创建儿童作为一个数组或类似的对象,它具有一致的属性,该属性在进入循环时进行检查,该条件在条件为真时继续。

在这种情况下,这将是最好创建儿童作为阵列,则在环路中,从而减小它:

while (childrens.length) { 
    // do stuff to reduce the length of childrens 
} 

所以当childrens.length是零,则测试为假,并且退出循环(或者如果childrens.length从零开始,则从不输入)。