2

在执行循环之前检查数组的长度是否不等于 0 是否有意义?

var arr = [1,2,3];
if (arr.length !== 0) {
    // do loop
}
4

3 回答 3

4

在一般情况下,它没有意义。对于 foreach、for 或 while 循环,循环条件将阻止循环执行,因此您的检查是多余的。

var arr = [];
for (var loopCounter = 0; loopCounter < arr.length; loopCounter++)
{
   // This loop will never be entered.
} 

foreach (var element in arr)
{
   // This loop will never be entered.
}

var loopCounter = 0;
while (loopCounter < arr.length)
{
   // This loop will never be entered.
   loopCounter++;
} 

但是,唯一重要的是您使用的是 do...while 循环。在这种情况下,循环执行,然后检查循环条件(为时已晚)。在这种情况下,您的代码很可能会在循环内引发异常,如下面的代码所示。

var arr = [];
var loopCounter = 0;
do 
{ 
   someMethod(arr[loopCounter]); // This will throw an error
   loopCounter++;
} 
while(loopCounter < arr.length);
于 2012-10-25T08:42:21.157 回答
1

嗯,这取决于循环。如果是以下形式:

for (i = 0; i < arr.length; i++) {
    do_something_with (arr[i]);
}

那么,不,if是多余的,for在这种情况下循环体将不会执行。

但是,如果您做过类似的事情(这似乎很可能是因为您提到了一个do循环,尽管您实际上可能是指“做循环”,所以很难说):

i = 0;
do {
    do_something_with (arr[i]);
    i++;
while (i < arr.length);

arr[0]那么,是的,如果不存在这样的野兽,您将需要它来避免使用问题。

但我会认为第二种情况(检查后)“损坏”,因为在这种情况下while () {}for () {}变体(检查前)会更自然。

于 2012-10-25T08:40:39.453 回答
1

不,检查是不必要的。如果数组有零个元素,循环将执行零次(假设它被正确写入)。

如果数组可以是null,那么检查它是有效的,例如

if(arr !== null)
{
    // loop
}
于 2012-10-25T08:40:56.293 回答