虽然条件没有终止

时间:2012-04-03 10:45:19

标签: javascript

if(childrens are present) {

   while(childrens.length ! ==0) {

            do something

    }
}   

// Execute this function fnName()

我的问题是while条件正在执行,但是当长度变为零时......它没有出来......并执行fnName()

3 个答案:

答案 0 :(得分:4)

如果您实际上是在循环中从数组中删除子节点,那么除了操作符上的间距错误之外,这应该没问题;它应该是!==,而不是! ==

while(childrens.length !== 0) {

请注意,要从数组中实际删除子项,您必须使用其中一种数组mutator方法,例如popsplice。我的猜测是你没有这样做。

更正常的做法是循环遍历数组而不改变它:

var index, len, child;

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

或者使用像forEach这样的新ES5内容(这需要知道您的用户将拥有一个非常新的浏览器,或者包含“ES5垫片”,因为forEach是其中之一这可以是shimmed):

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

旁注:“孩子”这个词已经是复数(单数是“孩子”),所以最后没有“s”。只是英语的不规则复数之一(有几个)。

答案 1 :(得分:2)

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

在这种情况下,最好将 childrens 创建为数组,然后在循环中递减它:

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

因此当childrens.length为零时,测试为假并且循环退出(或者如果childrens.length为零,则从未输入)。

答案 2 :(得分:1)

如果检查不等于零,则应为

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

如果这是一个拼写错误,另一个问题可能是你没有减少while循环中的孩子。因此,它会进入无限循环。