Używanie for...in
pętli do tablicy nie jest złe, chociaż mogę zgadnąć, dlaczego ktoś ci to powiedział:
1.) Istnieje już funkcja wyższego rzędu lub metoda, która ma ten cel dla tablicy, ale ma większą funkcjonalność i krótszą składnię, zwaną „forEach”: Array.prototype.forEach(function(element, index, array) {} );
2.) Tablice zawsze mieć długość, ale for...in
i forEach
nie realizują funkcję dla dowolnej wartości, która jest 'undefined'
jedynie dla indeksów, które mają określoną wartość. Jeśli więc przypiszesz tylko jedną wartość, te pętle wykonają funkcję tylko raz, ale ponieważ tablica jest wyliczona, zawsze będzie miała długość do najwyższego indeksu, który ma zdefiniowaną wartość, ale ta długość może pozostać niezauważona podczas korzystania z nich pętle
3.) Standard dla pętli wykona funkcję tyle razy, ile zdefiniujesz w parametrach, a ponieważ tablica jest ponumerowana, bardziej sensowne jest określenie, ile razy chcesz wykonać funkcję. W przeciwieństwie do innych pętli, pętla for może następnie wykonać funkcję dla każdego indeksu w tablicy, niezależnie od tego, czy wartość jest zdefiniowana, czy nie.
Zasadniczo możesz użyć dowolnej pętli, ale pamiętaj dokładnie, jak działają. Zrozum warunki, w których powtarzają się różne pętle, ich oddzielne funkcje i zdaj sobie sprawę, że będą one mniej lub bardziej odpowiednie dla różnych scenariuszy.
Można również uznać za lepszą praktykę stosowanie tej forEach
metody niż for...in
ogólnie pętli, ponieważ łatwiej jest pisać i ma więcej funkcji, więc możesz przyzwyczaić się do używania tej metody i standardu, ale połączenie.
Zobacz poniżej, że dwie pierwsze pętle wykonują instrukcje console.log tylko raz, podczas gdy standardowa pętla wykonuje tę funkcję tyle razy, ile określono, w tym przypadku array.length = 6.
var arr = [];
arr[5] = 'F';
for (var index in arr) {
console.log(index);
console.log(arr[index]);
console.log(arr)
}
// 5
// 'F'
// => (6) [undefined x 5, 6]
arr.forEach(function(element, index, arr) {
console.log(index);
console.log(element);
console.log(arr);
});
// 5
// 'F'
// => Array (6) [undefined x 5, 6]
for (var index = 0; index < arr.length; index++) {
console.log(index);
console.log(arr[index]);
console.log(arr);
};
// 0
// undefined
// => Array (6) [undefined x 5, 6]
// 1
// undefined
// => Array (6) [undefined x 5, 6]
// 2
// undefined
// => Array (6) [undefined x 5, 6]
// 3
// undefined
// => Array (6) [undefined x 5, 6]
// 4
// undefined
// => Array (6) [undefined x 5, 6]
// 5
// 'F'
// => Array (6) [undefined x 5, 6]