if(childrens are present) {
while(childrens.length ! ==0) {
do something
}
}
// Execute this function fnName()
我在这里的问题是越来越执行while条件,但是当长度变为零...它不出来......并执行fnName()虽然条件没有得到终止
if(childrens are present) {
while(childrens.length ! ==0) {
do something
}
}
// Execute this function fnName()
我在这里的问题是越来越执行while条件,但是当长度变为零...它不出来......并执行fnName()虽然条件没有得到终止
如果你实际上是从循环中的数组中删除孩子,那应该没问题,除了你在操作符上有间距错误;它应该是!==
,不! ==
:
while(childrens.length !== 0) {
注意,实际上从数组中删除的孩子,你必须使用数组赋值函数的方法之一,如pop
或splice
。我的猜测是你没有这样做。
比较正常的事情通过数组做将循环,不变异是:
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”。只是英语中的一个不规则复数(有几个)。
FWIW,'while(ar.length!== 0);'实际上是'SyntaxError',而不是无限循环! – Matt 2012-04-03 10:54:57
@Matt:的确如此。我只是说,其他的错字... – 2012-04-03 11:04:47
对于检查不等于零它应该是
children.length != 0 // (you have written in the question children.length ! ==0)
如果这是一个错字,另一个问题可能是你没有递减while循环中的子项。因此,它走向了一个无限循环。
通常的策略是创建儿童作为一个数组或类似的对象,它具有一致的属性,该属性在进入循环时进行检查,该条件在条件为真时继续。
在这种情况下,这将是最好创建儿童作为阵列,则在环路中,从而减小它:
while (childrens.length) {
// do stuff to reduce the length of childrens
}
所以当childrens.length
是零,则测试为假,并且退出循环(或者如果childrens.length
从零开始,则从不输入)。
发布演示问题的“工作”代码,而不是伪代码。 – RobG 2012-04-03 10:49:23
必须是'!=='。尝试< or > – kommradHomer 2012-04-03 10:50:10