Використання for...in
циклу для масиву не є помилковим, хоча я можу здогадатися, чому хтось сказав вам це:
1.) Існує вже функція або метод вищого порядку, який призначений для масиву, але має більше функціональних можливостей і синтаксис, що називається "forEach": Array.prototype.forEach(function(element, index, array) {} );
2.) Масиви завжди мають довжину, але for...in
і forEach
не виконують функції для будь-якого значення, яке 'undefined'
тільки для індексів , які мають значення , визначене. Отже, якщо ви призначите лише одне значення, ці петлі виконують функцію лише один раз, але оскільки масив перераховується, він завжди матиме довжину до найвищого індексу, який має визначене значення, але ця довжина може залишитися непоміченою при використанні цих петлі.
3.) Стандарт для циклу буде виконувати функцію стільки разів, скільки ви визначаєте в параметрах, і оскільки масив пронумерований, має більш сенс визначити, скільки разів ви хочете виконати функцію. На відміну від інших циклів, цикл for може потім виконати функцію для кожного індексу в масиві, незалежно від того, визначається чи ні.
По суті, ви можете використовувати будь-який цикл, але слід пам’ятати, як саме вони працюють. Зрозумійте умови, за якими повторюються різні петлі, їх окремі функціональні можливості, і зрозумійте, що вони будуть більш-менш придатними для різних сценаріїв.
Крім того, можна вважати кращою практикою використання forEach
методу, ніж for...in
цикл взагалі, тому що це простіше писати та має більше функціональних можливостей, тому, можливо, ви захочете звикнути лише використовувати цей метод і стандарт для, але ваш дзвінок.
Нижче дивіться, що перші два цикли виконують оператори console.log лише один раз, тоді як стандарт для циклу виконує функцію стільки разів, скільки зазначено, у цьому випадку 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]