Почему 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 шт):
Если вы перебираете массив, замените for...in на for...of. for...in используется для перебора ключей в объекте, для массива он будет просто перебирать номера индексов массива.