Почему for in вызывает ошибку, а for работает корректно?

Я пытаюсь оптимизировать мою сборку gulp. У меня в gulpfile.js есть функция fontsStyle, которая принимает все имена файлов со шрифтами, ну и если такие файлы есть формирует из них scss файл, куда подключает эти шрифты. Например, пусть в роли item будет Roboto-BoldItalic.ttf

Вот фрагмент функции который вызывает проблемы с for ... in, но с обычным for работает корректно:

   for (/*let i = 0 ; i < items.length; ++i*/ let item in items) {
                //let item = items[i];
                item = item.split('.')[0]; // `"Roboto-BoldItalic"`
                let fileName = item; // `"Roboto-BoldItalic"`
                item = item.split('-'); // `["Roboto", "BoldItalic"]`

                let fontname = item[0]; // `"Roboto"` 
                let fontParams = item[1]; // `"BoldItalic"`

                // Тут возникает ошибка TypeError: Cannot read property 'split' of undefined
                fontParams = fontParams.split(/(?!^)(?=[A-Z])/); // а должно быть `["Bold", "Italic"]`

На этом этапе я еще не проверяю на undefined, но это и не нужно по идее. Меняю цикл обратно на for и функция работает. Почему?


Ответы (1 шт):

Автор решения: vsemozhebuty

Если вы перебираете массив, замените for...in на for...of. for...in используется для перебора ключей в объекте, для массива он будет просто перебирать номера индексов массива.

→ Ссылка