iterator
-
当一个对象实现了Symbol.iterator时,认为它是可迭代的。如array、map、set、string、int32Array、unit32Array等内置类型,目前都实现了各自的Symbol.iterator
-
对象上的Symbol.iterator函数负责返回供迭代的值
-
for…of语句会遍历可迭代的对象,调用对象上的Symbol.iterator方法
-
如:在数组上使用for…of遍历
const array = [123, 'xcr', true]; for (let item of array) { console.log(item) } // 123 // xcr // true
-
-
for…of和for…in都可以迭代一个数组,但是区别很大,它们用于迭代器的返回值不同
-
for…of迭代的是对象的值
-
for…in迭代的是对象的键
const arr = [123, 'xcr', true]; for (let item in arr) { console.log( item) } // 0 // 1 // 2 const arr = [123, 'xcr', true]; for (let item of arr) { console.log( item) } // 123 // xcr // true
-
-
for…in可以操作任何对象,提供了查看对象属性的一种方法
-
for…of关注迭代对象的值,内置对象Map和Set已经实现了Symbol.iterator方法
- 将ts的代码目标设定为ES5,迭代器就只允许在array类型上使用。
- 在非数组上使用for…of会报错