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