Muhtasari wa Kielekili cha JavaScript

Vitu vilivyo vingine vilivyo vingine vilivyo vingine ni vitu vilivyo vingine vilivyo vingine ambavyo vinaweza kuingia (kama jumla).

Vitu vilivyo vingine vilivyo vingine vilivyo vingine vinaweza kufikia kwa mkataba wa programu ya kina na kina inayoweza kufikia kwa kina kina.

Vitu vilivyo vingine vilivyo vingine vilivyo vingine vinaweza kutumika kwa: for..of Kikikuu kinahatika kwa ugaumiza.

for..of kikikuu

for..of madai ya kufaa kila kiwango cha kufaa kwa vitu vilivyo vingine vilivyo vingine.

Inaaminia

for (variable of iterable) {
  // 要执行的代码块
// Kwa ukweli code

Ugaumiza

Ukagumu wa ugaumiza inapofahamika kwa urahisi.

Hii inamaanisha kufaa kila kiwango cha ugaumiza visano vya matukio.

Hapa ni mafanikio ya kwanza:

  • Kufaa kila kiwango cha herufu
  • Kufaa kila kiwango cha jumla

Kufaa kila kiwango cha herufu

可以使用 for..of Kufaa kila kiwango cha herufu za mradi:

Tukana na hivyo, naweza kusababisha kwa sababu yoyote:

const name = "W3Schools";
for (const x of name) {
  // 要执行的代码块
// Kwa ukweli code

}

Kufaa kila kiwango cha jumla

可以使用 for..of Kufaa kila kiwango cha matukio ya jumla:

Mfano 1

const letters = ["a","b","c"];
for (const x of letters) {
  // 要执行的代码块
// Kwa ukweli code

}

Mfano 2

const numbers = [2,4,6,8];
for (const x of numbers) {
  // 要执行的代码块
// Kwa ukweli code

}

Kufaa kila kiwango cha Set

可以使用 for..of Kufaa kila inayofikia ugaumiza kwa kila kiwango cha Set:

Tukana na hivyo, naweza kusababisha kwa sababu yoyote:

const letters = new Set(["a","b","c"]);
for (const x of letters) {
  // 要执行的代码块
// Kwa ukweli code

}

注释:我们将在后续章节中详细介绍 Set 和 Map。

遍历 Map

可以使用 for..of 循环遍历 Map 的元素:

Tukana na hivyo, naweza kusababisha kwa sababu yoyote:

const fruits = new Map([
  ["apples", 500],
  ["bananas", 300],
  ["oranges", 200]
});
for (const x of fruits) {
  // 要执行的代码块
// Kwa ukweli code

}

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, ...:

Tukana na hivyo, naweza kusababisha kwa sababu yoyote:

// 自定义可迭代对象
function myNumbers() {
  let n = 0;
  return {
    next: function() {
      n += 10;
      return { value: n, done: false };
    // Kwa ukweli code
  };
// Kwa ukweli code
// 创建可迭代对象
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 of iterable}) { }

Tukana na hivyo, naweza kusababisha kwa sababu yoyote:

// Kufaafisha kwa kila jina
myNumbers = {};
// Kuweka kwa usababishaji
myNumbers[Symbol.iterator] = function() {
  let n = 0;
  done = false;
  return {
    next() {
      n += 10;
      if (n == 100) { done = true; }
      return { value: n, done: done };
    // Kwa ukweli code
  };
};
// Kwa sasa inaweza kutumia for..of
for (const num of myNumbers) {
  if (result.done) break;
// Kwa ukweli code

}

Method ya Symbol.iterator inasababisha for..of Kusababisha kwa kina

Kusababisha kwa upya

Tukana na hivyo, naweza kusababisha kwa sababu yoyote:

Mivuno
let iterator = myNumbers[Symbol.iterator]();
  while (true) {
  const result = iterator.next();
  if (result.done) break;
// Kwa ukweli code

}