for...of¶
Распространенная ошибка, с которой сталкиваются начинающие JavaScript разработчики - это то, что for...in для массива не итерирует элементы массива. Вместо этого итерация происходит по ключам переданного объекта. Это показано на примере ниже. Здесь мы ожидаем 9,2,5, но получаем индексы 0,1,2:
1 2 3 4 | |
Это первая причина, по которой for...of существует в TypeScript (и ES6). Следующая итерация массива корректно выводит члены массива, как ожидалось:
1 2 3 4 | |
Точно также TypeScript не испытывает затруднений при итерировании строки посимвольно, используя for...of:
1 2 3 4 | |
Генерация JS¶
Для версий JS до ES6 TypeScript генерирует стандартный тип цикла for (var i = 0; i < list.length; i++). Например, вот что генерируется для нашего предыдущего примера:
1 2 3 4 5 6 7 8 9 10 11 | |
Вы видите, что использование for...of делает код более понятным и уменьшает его объем.
Ограничения¶
Для версий JS до ES6 сгенерированный код предполагает, что свойство length существует на объекте и этот объект может быть проиндексирован по номерам, например, obj[2]. Это поддерживается только для строк и массивов для устаревших движков JS.
Если вы используете for...of не на массиве или строке, TypeScript сообщит об этом ошибкой "is not an array type or a string type".
1 2 3 4 5 6 7 | |
Используйте for...of только для случаев, когда вы уверены, что применяете это к строке или массиву. Помните, что это ограничение может быть удалено на следующих версиях TypeScript.
Заключение¶
Вы можете удивиться, как часто вы итерируете элементы массива. В следующий раз, когда будете это делать, попробуйте использовать for...of. Вы можете просто порадовать следующего человека, который просматривает ваш код.