在JavaScript中,可迭代的(Iterable)是指一个对象定义了Symbol.iterator方法。这个方法返回一个迭代器(Iterator)对象,该对象有一个next()方法,该方法返回一个包含value和done属性的对象。
value:当前迭代的值。
done:一个布尔值,当迭代完成时返回true。
当你使用for…of循环遍历一个可迭代的对象时,实际上是在调用这个对象的Symbol.iterator方法,然后使用返回的迭代器的next()方法来获取下一个值,直到done为true为止。
例如,数组在JavaScript中是可迭代的:
const arr = [1, 2, 3]; for (const item of arr) { console.log(item); // 1, 2, 3 }
在上面的例子中,arr是一个可迭代的对象,因为它有一个内置的Symbol.iterator方法。当使用for…of循环时,这个方法被调用,并返回一个迭代器,该迭代器使用next()方法来逐个返回数组中的元素。
除了数组,还有很多其他内置的类型也是可迭代的,如Map、Set、String、TypedArray等。此外,你还可以定义自己的可迭代对象,只需在对象上实现Symbol.iterator方法即可。
例如,定义一个简单的可迭代对象:
const myIterable = { data: [1, 2, 3, 4], [Symbol.iterator]() { let index = 0; return { next() { if (index < this.data.length) { return { value: this.data[index++], done: false }; } else { return { done: true }; } } }; } }; for (const item of myIterable) { console.log(item); // 1, 2, 3, 4 }
在这个例子中,我们定义了一个名为myIterable的对象,并在其上实现了Symbol.iterator方法,使其成为一个可迭代的对象。然后我们可以使用for…of循环来遍历它。