Iterables
Un objeto es iterable si aplica la propiedad Symbol.iterator. Hay algunos tipos iterables integrados en el lenguaje como Array, Map, Set, String, etc. Estos tipos implementan la propiedad Symbol.iterator internamente. La función Symbol.iterator en un objeto dado es la función responsable de devolver la lista de valores iterados.
Cláusula for..of
La declaración for..of
gira en torno a un objeto que es iterable, llamando a la propiedad Symbol.iterator
del objeto. Aquí hay un ejemplo simple de cómo puede usar for..of para rotar los elementos de una matriz:
let someArray = [1, "string", false]; for (let entry of someArray) { console.log(entry); // 1, "string", false }
Cláusulas for..of vs. for..in
Repite tanto las oraciones for..of
como for..in
en las listas. Pero los valores del iterador son diferentes, ya que for..in
devuelve una lista de claves del objeto sobre el que se itera, mientras que for..of
devuelve una lista de valores de propiedades escalares del objeto sobre el que se itera. Este ejemplo ilustra la diferencia:
let list = [4, 5, 6]; for (let i in list) { console.log(i); // "0", "1", "2", } for (let i of list) { console.log(i); // "4", "5", "6" }
Otra diferencia es que la declaración for..in
funciona en cualquier objeto y actúa como una forma de explorar las propiedades del objeto. Por otra parte for..of
se usa solo para acceder a los valores de los objetos iterables. Se implementan objetos en línea como Map
y una Set
propiedad Symbol.iterator
, lo que permite el acceso a los valores almacenados:
let pets = new Set(["Cat", "Dog", "Hamster"]); pets["species"] = "mammals"; for (let pet in pets) { console.log(pet); // "species" } for (let pet of pets) { console.log(pet); // "Cat", "Dog", "Hamster" }
Objetivo ES5 y ES3
Al apuntar a ES5 o ES3, solo se permiten iteradores en valores del tipo Array. Se generará un error si se utilizan bucles for..of en valores que no sean matrices, incluso si esos valores aplican la propiedad Symbol.iterator
. El compilador generará un bucle for
simple para bucles for..of
, por ejemplo el código:
let numbers = [1, 2, 3]; for (let num of numbers) { console.log(num); }
Codigo de GENERACION:
var numbers = [1, 2, 3]; for (var _i = 0; _i < numbers.length; _i++) { var num = numbers[_i]; console.log(num); }
Orientación a ECMAScript 2015 y versiones posteriores
Orientación a ECMAScript 2015 y versiones posteriores
Al apuntar a un motor que es compatible con ECMAScript 2015, el compilador generará _ bucles para apuntar a la implementación de iteradores integrados en el motor.
Recursos del Artículo
- Categorías en TypeScript
- Declaración de Variables en TypeScript
- Funciones en TypeScript
- Inferir Tipos en TypeScript
- Interfaces en TypeScript
- Introducción a TypeScript
- Iteradores y generadores en TypeScript
- Múltiples Constantes en TypeScript
- Símbolo en TypeScript (Symbol)
- Tipos Avanzados en TypeScript
- Tipos Básicos de Datos en TypeScript
- Tipos de Compatibilidad en TypeScript
- Tipos Generalizados (Generics) en TypeScript