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]);
}

いいえ、不要です。この場合ifforループ本体は実行されません。

ただし、次のようなことを行った場合(do実際には「ループを実行する」ことを意味していた可能性がありますが、ループについて言及していると思われるため、言うのは難しいです):

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

arr[0]その場合、はい、そのような獣が存在しない場合に使用するという問題を回避するために必要になります。

while () {}しかし、その場合はorfor () {}バリアント (check-before) の方が自然なので、2 番目のケース (check-after) は「壊れている」と考えます。

于 2012-10-25T08:40:39.453 に答える
1

いいえ、チェックは不要です。配列の要素がゼロの場合、ループは 0 回実行されます (正しく記述されている場合)。

配列が である可能性がある場合null、それをチェックすることは有効です。

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