Iterable Object JavaScript
Kaiyuka dominan yin ayyuka za ayyuka dominan yin ayyuka (tasi da sauransu)
Kaiyuka dominan yin ayyuka za ayyuka dominan yin ayyuka dominan yin ayyuka
Kaiyuka dominan yin ayyuka za ayyuka dominan yin ayyuka for..of
Ayyuka dominan yin ayyuka yana ayyuka
For..of循环
for..of
Dabbobin na ayyuka don ayyuka dominan yin ayyuka kaiyuka
Syntax
for (variable من القابلية للتدوير) { // 要执行的代码块 }
Iterasyon
Iterasyon yana da tasiri sosai
Wannan ne na yana nufin ayyuka dominan yin ayyuka
Duba dabbobin da dabbobin na
- Ayyuka dominan yin ayyuka
- Ayyuka dominan yin ayyuka
Ayyuka dominan yin ayyuka
可以使用 for..of
Ayyuka dominan yin ayyuka
مثال
const name = "W3Schools"; for (const x of name) { // 要执行的代码块 }
Ayyuka dominan yin ayyuka
可以使用 for..of
Ayyuka dominan yin ayyuka
Shirin 1
const letters = ["a","b","c"]; for (const x of letters) { // 要执行的代码块 }
Shirin 2
const numbers = [2,4,6,8]; for (const x of numbers) { // 要执行的代码块 }
Ayyuka dominan yin ayyuka
可以使用 for..of
Ayyuka dominan yin ayyuka ayyuka
مثال
const letters = new Set(["a","b","c"]); for (const x of letters) { // 要执行的代码块 }
注释:我们将在后续章节中详细介绍 Set 和 Map。
遍历 Map
可以使用 for..of
循环遍历 Map 的元素:
مثال
const fruits = new Map([ ["apples", 500], ["bananas", 300], ["oranges", 200] }); for (const x of fruits) { // 要执行的代码块 }
JavaScript 迭代器
迭代器协议定义了如何从对象中生成一系列值。
当对象实现了 next()
方法时,它就成为迭代器。
next()
方法必须返回一包含两个属性的对象:
- value(下一个值)
- done(true 或 false)
value |
迭代器返回的值。 如果 done 为 true,则可以省略。 |
done |
如果迭代器已完成,则为 true。 如果迭代器生成了新值,则为 false。 |
注意:
从技术上讲,可迭代对象必须实现 Symbol.iterator 方法。
字符串、数组、TypedArray、Map 和 Set 都是可迭代对象,因为它们的原型对象具有 Symbol.iterator 方法。
自定义可迭代对象
下例展示了一个自定义的可迭代对象,它永远不会结束,每次调用 next()
都会返回 10, 20, 30, 40, ...:
مثال
// 自定义可迭代对象 function myNumbers() { فليت n = 0; يعود { next: function() { n += 10; return { value: n, done: false }; } }; } // 创建可迭代对象 const n = myNumbers(); n.next(); // 返回 10 n.next(); // 返回 20 n.next(); // 返回 30
问题是:
自定义的可迭代对象不支持 JavaScript 的 for..of
语句。
支持 for..of 的可迭代对象
JavaScript 可迭代对象是拥有 Symbol.iterator 的对象。
Symbol.iterator 是一个返回 next()
方法的函数。
可以使用以下代码对可迭代对象进行迭代:
for (const x من القابلية للتدوير}) { }
مثال
// أنشئ عنصرًا myNumbers = {}; // يجعله قابلًا للتحويل myNumbers[مبدأ.مبدأ] = function() { فليت n = 0; تم اكتمال العمل = المزعومة; يعود { التالي() { n += 10; إذا (كان n == 100) { تم اكتمال العمل = الحقيقة; } يعود { قيمة: n، تم اكتمال العمل: تم اكتمال العمل }; } }; }; // الآن يمكن استخدام for..of for (فليت عدد من myNumbers) { // أي كود }
يتم استدعاء طريقة Symbol.iterator for..of
الاستدعاء التلقائي.
لكن يمكننا أيضًا استدعاء ذلك يدويًا:
مثال
فليت مبدأ = myNumbers[مبدأ.مبدأ]; while (الحقيقة) { ثابت النتيجة = مبدأ.next(); إذا (تم اكتمال النتيجة) فالقف // أي كود }