主な欠点は次のとおりです。
fruit = arr.pop();
while (fruit) {
false と評価された場合fruit
(つまり、null、未定義、0 など)、ループは停止します。これは、スパース配列にとっては厄介です。
var arr = [0,,,,2];
最後のメンバーのみをループし、 を評価しようとするとarr[arr.length - 2]
、未定義 (存在しない) が返されるため、ループが終了します。for
プロパティが最初に存在するかどうかをテストできるため(必要な場合)、これはループで回避できます。
for (var i=0, iLen=arr.length; i<iLen; i++) {
if (i in arr) {
// arr has a property i so do stuff with arr[i]
}
}
したがって、popメソッドは高速かもしれませんが、信頼できるのは、どの値も false と評価されないことが確実な場合、またはカウンターを保持することによってループが終了する場合のみです。
var fruit,
i = arr.length;
do {
fruit = arr.pop();
} while (--i)
だからあなたもそうするかもしれません
do {
fruit = arr[--i];
} while (i);
コピーを気にしないでください。