if(childrens are present) {
while(childrens.length ! ==0) {
do something
}
}
// Execute this function fnName()
我的问题是while条件正在执行,但是当长度变为零时......它没有出来......并执行fnName()
答案 0 :(得分:4)
如果您实际上是在循环中从数组中删除子节点,那么除了操作符上的间距错误之外,这应该没问题;它应该是!==
,而不是! ==
:
while(childrens.length !== 0) {
请注意,要从数组中实际删除子项,您必须使用其中一种数组mutator方法,例如pop
或splice
。我的猜测是你没有这样做。
更正常的做法是循环遍历数组而不改变它:
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循环中的孩子。因此,它会进入无限循环。