JavaScript >> Javascript 文檔 >  >> JavaScript

JavaScript 中的 for...of 循環

JavaScript for...of 語句迭代可迭代對象的值,例如數組、字符串、映射、集合、節點列表等。在 ES6 中引入它是為了提供乾淨簡潔的迭代機制。

語法

for...of 語句的語法如下:

for (const value of iterable) {
  // code block to be executed
}

對於每次迭代,將屬性的值分配給 value 多變的。可以用 const 聲明 , let , 或 var . iterable 是具有可枚舉屬性(字符串、數組、映射、集合等)並且可以迭代的對象。代碼塊對每個屬性執行一次。

示例

讓我們看以下示例,演示如何使用 for...of 循環遍歷不同的可迭代對象的語句。

遍歷數組

JavaScript 數組是一種簡單的數據結構,可將多個值存儲在單個變量中。這是一個示例,展示瞭如何使用 for...of 迭代數組 循環:

const birds = ['🐦', '🦅', '🦆', '🦉'];

// iterate over all values
for (const bird of birds) {
  console.log(`Hey ${bird}`);
}

// Hey 🐦
// Hey 🦅
// Hey 🦆
// Hey 🦉

遍歷字符串

字符串也是一種可迭代的數據類型,所以可以使用 for...of 也在字符串上:

const str = 'Cat';

// iterate over the string
for (const char of str) {
  console.log(char.toUpperCase().repeat(2));
}

// CC
// AA
// TT

遍歷地圖

JavaScript Map 是 ES6 中引入的一種特殊數據結構,允許您創建鍵值對的集合。對象和原始值都可以用作鍵或值。

遍歷地圖時,for...of 語句為每次迭代返回一個鍵值對,其插入順序與插入順序相同,如下所示:

const foods = new Map([
    ['🍌', 'Banana'],
    ['🍕', 'Pizza'],
    ['🥒', 'Cucumber']
]);

// iterate over the map
for (const [key, value] of foods) {
    console.log(`${key}: ${value}`);
}

// 🍌: Banana
// 🍕: Pizza
// 🥒: Cucumber

迭代一個集合

JavaScript Set 是 ES6 中引入的一種特殊類型的對象,它允許您創建唯一值的集合。您可以將對象和基元作為值存儲在集合對像中。

以下示例顯示瞭如何使用 for...of 迭代一個集合對象:

const flowers = new Set(['🌷', '🌻', '🌹', '🌸']);

// iterate over the set
for (const flower of flowers) {
  console.log(flower);
}

// 🌷
// 🌻
// 🌹
// 🌸

遍歷 Arguments 對象

參數對像只是一個可在函數內部訪問的類數組對象,其中包含傳遞給該函數的參數值。

使用 for...of 循環,您可以遍歷 arguments 對象列出傳遞給 JavaScript 函數的所有參數:

function animals() {
  for (const arg of arguments) {
    console.log(arg);
  }
}

animals('🐱', '🐧', '🐥', '🐯');

// 🐱
// 🐧
// 🐥
// 🐯

遍歷 DOM 集合

for...of 語句也可用於迭代 DOM 集合,如 NodeList .以下示例添加了一個 img-fluid 分類為文章直接子級的圖像:

// select all images
const images = document.querySelectorAll('article > img');

// iterate over NodeList
for (const img of images) {
  img.classList.add('img-fluid');
}

迭代生成器

生成器是 JavaScript 中一種特殊的函數,可以退出並稍後重新進入。

您可以使用 for...of 輕鬆迭代生成器 語句如下例所示:

function* generator() {
  yield 1;
  yield 2;
  yield 3;
};

// iterate over the generator
for (const gen of generator()) {
  console.log(gen);
}

// 1
// 2
// 3

關閉迭代器

您可以輕鬆終止 for...of 使用 break 循環並關閉迭代器 , return , 或 throw 聲明:

const digits = [1, 2, 3];

for (const d of digits) {
  console.log(d);
  // terminate loop 
  break;
}

console.log('Done');

// 1
// Done

迭代對象文字

不幸的是,for...of 僅適用於可迭代對象。對象字面量是不可迭代的。但是,您可以使用 Object.keys() 方法來獲取所有屬性名稱,然後遍歷它們:

const animals = {
  tiger: '🐅',
  cat: '🐱',
  monkey: '🐒',
  elephant: '🐘'
};


for (const key of Object.keys(animals)) {
  console.log(`${key} -> ${animals[key]}`);
}

// tiger -> 🐅
// cat -> 🐱
// monkey -> 🐒
// elephant -> 🐘

而不是使用 for...of 語句,你應該考慮使用 for...in 循環對象字面量。

瀏覽器兼容性

JavaScript for...of 聲明目前僅受現代瀏覽器支持。如果你想支持像 Internet Explorer 這樣的舊瀏覽器,你需要一個 polyfill 或者使用 forEach() 循環來代替。


Tutorial JavaScript 教程
  1. LeetCode 200. 島嶼數量(javascript 解決方案)

  2. 什麼是 linting,它如何節省您的時間?

  3. 基本 JavaScript 工具

  4. JavaScript 代理的實際用例

  5. Bootstrap Modals 關閉後繼續向 body 添加 padding-right

  6. 15 個正則表達式可以讓你在大三(和大四)時不頭痛

  7. React Native Plant App UI #7:忘記密碼屏幕

  1. 大家好 :)

  2. 將帶有 TypeScript 路徑別名的 Apollo 服務器部署到 Vercel

  3. SitePoint CSS 參考內測

  4. Typper 💻🎮,(開始)一個打字遊戲 [v​​0.2.0-beta]

  5. 如何使用 NodeJs 在 Gitlab 上設置 CI/CD 環境

  6. 每個開發人員在建立新的前端項目之前應該問自己的 14 個問題

  7. 解決方案:回文子串

  1. 如何使來自 .after() 的 html 作為內聯元素出現

  2. React/Web 應用程序的 Docker 工作流程

  3. Ember.js 模板中的遞歸,case factorial(n)

  4. 在 Netlify 上部署 Next.js