JS學習筆記#17 | for...of 和 for...in 迴圈

更新於 發佈於 閱讀時間約 6 分鐘

for...of

核心概念

  • 迭代「可迭代物件 (iterable objects)」的值 (values)。
可迭代物件 (Iterable):具備 Symbol.iterator 方法,能夠逐一取出內部的值。一般物件 (plain object) 本身不是可迭代物件,除非你為它添加 Symbol.iterator 方法(較少見)。
  • 適用於:陣列 (Array)、字串 (String)、Map、Set、NodeList 等。
  • 直接取出物件中的每一個值。

語法

for (const element of iterable) {
// element 代表可迭代物件中的每一個值
}
  • 遍歷陣列:
const colors = ['red', 'green', 'blue'];
for (const color of colors) {
console.log(color); // 依序印出 "red", "green", "blue"
}
  • 遍歷字串:
const message = "Hello";
for (const char of message) {
console.log(char); // 依序印出 "H", "e", "l", "l", "o"
}
  • 遍歷 Map:
const myMap = new Map([
['apple', 1],
['banana', 2],
['cherry', 3]
]);
for (const [key, value] of myMap) {
console.log(key, value); // 依序印出 "apple 1", "banana 2", "cherry 3"
}
  • 遍歷 Set:
const mySet = new Set([1, 2, 3, 2]); // Set 會自動移除重複值
for (const value of mySet) {
console.log(value); // 依序印出 1, 2, 3
}
  • 遍歷 NodeList:
const listItems = document.querySelectorAll('li');
for (const listItem of listItems) {
console.log(listItem.textContent) // 印出每個li的文字內容
}

重點

  • 取得的是「值」,非索引或鍵。
  • 適用於任何可迭代物件。
  • 可使用 break 和 continue。
  • 不能直接迭代一般物件 (除非物件有定義迭代器)。


for...in

核心概念

  • 迭代「物件 (object)」的可枚舉屬性 (enumerable properties)。
  • 適用於:一般物件 (plain objects)。
  • 取出物件中的每一個屬性名稱 (鍵/key)。

語法

for (const key in object) {
// key 代表物件的屬性名稱 (鍵)
}
  • 遍歷物件的屬性:
const person = {
name: "John",
age: 30,
city: "New York"
};
for (const key in person) {
console.log(key, person[key]); // 依序印出 "name John", "age 30", "city New York"
}


重點

  • 取得的是「鍵 (key)」,而非值。
  • 主要用於迭代一般物件 (plain objects)。
  • 會遍歷原型鏈上的可枚舉屬性。
  • 屬性遍歷順序不保證。
  • 可使用 break 和 continue。
  • 在處理物件屬性時,記得使用 hasOwnProperty() 檢查是否為物件自身屬性。
function Person(name) {
this.name = name;
}

Person.prototype.greet = function() {
console.log("Hello, my name is " + this.name);
}

const person = new Person("Alice");

for (const key in person) {
if (person.hasOwnProperty(key)) {
console.log("Own property:", key, person[key]); // 只會印出 "Own property: name Alice"
} else {
console.log('Prototype property:',key,person[key]) // 會印出 "Prototype property: greet [Function (anonymous)]"
}
}
avatar-img
0會員
19內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
koko的沙龍 的其他內容
Spread Syntax和Rest Parameters都使用 ... 符號,Spread Syntax用於展開可迭代物件,例如將陣列或物件的元素複製到新的陣列或物件中,或是在函式呼叫時傳遞參數。Rest Parameters用於收集不定數量的函數參數,將其打包成一個陣列,方便在函數內部進行處理。
身為一名女性,我常常在生活中感受到性別帶來的無形壓力。 而閱讀上野千鶴子《厭女:日本的女性嫌惡》這本書後,讓我突然意識到原來身為女性,在這個社會上彷彿在玩著一款難度超高的遊戲。
5/5厭女:日本的女性嫌惡
這個專案是一個使用 Vue3、Vite、daisyUI 和 Google Gemini AI API 打造的雙 AI 對話模擬器。 使用者可以設定兩個 AI 角色的名稱和描述,然後讓它們自行對話。 這個專案旨在展示前端如何與 AI API 互動,以及如何建立具有互動性的 AI 應用程式。
箭頭函式是 JavaScript ES6(ECMAScript 2015)引入的一種簡化 Function Expression 語法。 它用來快速定義匿名函式,語法簡潔,特性明確,特別適合用於回呼函式等場景。
Function Declaration 與 Function Expression Function Declaration 適合用於需要提升或全域使用的函式。 Function Expression 更靈活,適合用於回呼函式、閉包、高階函式等場景。
DOM (Document Object Model) 是瀏覽器用於操作 HTML 或 XML 文件的編程介面。它將文檔解析為一個節點樹 (Node Tree),每個節點代表文檔的一部分(標籤、屬性、文字等)。
Spread Syntax和Rest Parameters都使用 ... 符號,Spread Syntax用於展開可迭代物件,例如將陣列或物件的元素複製到新的陣列或物件中,或是在函式呼叫時傳遞參數。Rest Parameters用於收集不定數量的函數參數,將其打包成一個陣列,方便在函數內部進行處理。
身為一名女性,我常常在生活中感受到性別帶來的無形壓力。 而閱讀上野千鶴子《厭女:日本的女性嫌惡》這本書後,讓我突然意識到原來身為女性,在這個社會上彷彿在玩著一款難度超高的遊戲。
5/5厭女:日本的女性嫌惡
這個專案是一個使用 Vue3、Vite、daisyUI 和 Google Gemini AI API 打造的雙 AI 對話模擬器。 使用者可以設定兩個 AI 角色的名稱和描述,然後讓它們自行對話。 這個專案旨在展示前端如何與 AI API 互動,以及如何建立具有互動性的 AI 應用程式。
箭頭函式是 JavaScript ES6(ECMAScript 2015)引入的一種簡化 Function Expression 語法。 它用來快速定義匿名函式,語法簡潔,特性明確,特別適合用於回呼函式等場景。
Function Declaration 與 Function Expression Function Declaration 適合用於需要提升或全域使用的函式。 Function Expression 更靈活,適合用於回呼函式、閉包、高階函式等場景。
DOM (Document Object Model) 是瀏覽器用於操作 HTML 或 XML 文件的編程介面。它將文檔解析為一個節點樹 (Node Tree),每個節點代表文檔的一部分(標籤、屬性、文字等)。
你可能也想看
Google News 追蹤
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
for loop、while loop、repeat
Thumbnail
給定一個字串陣列,請把它們所共有的字元伴隨著出現次數輸出。這篇文章介紹如何使用字典統計出現次數,和字典取交集的方法來解決此問題。並提供了複雜度分析和關鍵知識點。
※ 何謂巢狀迴圈(NESTD LOOP): 指的是一個迴圈內包含另一個迴圈的結構。在程式設計中,這種結構常用於需要進行多層次迭代的場合,例如處理多維數組、逐行逐列處理表格資料等。 ※ 例子:九九乘法表 說明: 外層迴圈:for (let i = 1; i <= 9; i = i + 1) 這
※ 迴圈(for loop)介紹: 迴圈的用途是重複執行程式碼,只要條件滿足,就會執行特定的動作。 for (let i = 0; i < 10; i = i + 1) { console.log(i); } 說明: for:對於。 let:因為迭代器的數值會一直改變所以要用let
Thumbnail
分享在網路上看到的陣列題目。通常 for...of 的 value 是陣列中的每個值,那如果我們在迭代中對陣列操作會發生什麼事? 題目來源:https://x.com/_jayphelps/status/1774640511158022335?s=20
Thumbnail
題目已經給了依照起點升序排列好的區間陣列。 接下來新插入一個區間,插入後如果和原本的區間重疊,請把他們合併,要求我們輸出插入後的結果。 這是一個線性掃苗,所需時間為O(n)的演算法。 題目已經幫我們排序好區間順序,我們只要接著依序檢查區間、(假如有重疊的話)合併區間。
Thumbnail
題目會給定一個陣列nums和一個目標值goal。計算子陣列總和=goal的數目有多少。演算法包含前綴和和字典的技巧,時間複雜度為O(n),空間複雜度為O(n)。
Thumbnail
題目敘述 題目會給定我們一個輸入陣列nums,要求我們掃描美個陣列元素nums[i],計算除了nums[i]以外的陣列元素連乘積。 題目的原文敘述 測試範例 Example 1: Input: nums = [1,2,3,4] Output: [24,12,8,6] nums[0] 以
Thumbnail
題目敘述 題目會給定一個整數陣列arr,要求我們判斷是否每個元素的出現次數都不同? 題目的原文敘述 測試範例 Example 1: Input: arr = [1,2,2,1,1,3] Output: true Explanation: The value 1 has 3 occurre
Thumbnail
巢狀迴圈For loop介紹結構及範例說明 巢狀迴圈 巢狀迴圈是在一個迴圈內包含另一個迴圈的結構 簡單來說,就是內迴圈做完,才會在跑到外迴圈,接著在做內迴圈
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
for loop、while loop、repeat
Thumbnail
給定一個字串陣列,請把它們所共有的字元伴隨著出現次數輸出。這篇文章介紹如何使用字典統計出現次數,和字典取交集的方法來解決此問題。並提供了複雜度分析和關鍵知識點。
※ 何謂巢狀迴圈(NESTD LOOP): 指的是一個迴圈內包含另一個迴圈的結構。在程式設計中,這種結構常用於需要進行多層次迭代的場合,例如處理多維數組、逐行逐列處理表格資料等。 ※ 例子:九九乘法表 說明: 外層迴圈:for (let i = 1; i <= 9; i = i + 1) 這
※ 迴圈(for loop)介紹: 迴圈的用途是重複執行程式碼,只要條件滿足,就會執行特定的動作。 for (let i = 0; i < 10; i = i + 1) { console.log(i); } 說明: for:對於。 let:因為迭代器的數值會一直改變所以要用let
Thumbnail
分享在網路上看到的陣列題目。通常 for...of 的 value 是陣列中的每個值,那如果我們在迭代中對陣列操作會發生什麼事? 題目來源:https://x.com/_jayphelps/status/1774640511158022335?s=20
Thumbnail
題目已經給了依照起點升序排列好的區間陣列。 接下來新插入一個區間,插入後如果和原本的區間重疊,請把他們合併,要求我們輸出插入後的結果。 這是一個線性掃苗,所需時間為O(n)的演算法。 題目已經幫我們排序好區間順序,我們只要接著依序檢查區間、(假如有重疊的話)合併區間。
Thumbnail
題目會給定一個陣列nums和一個目標值goal。計算子陣列總和=goal的數目有多少。演算法包含前綴和和字典的技巧,時間複雜度為O(n),空間複雜度為O(n)。
Thumbnail
題目敘述 題目會給定我們一個輸入陣列nums,要求我們掃描美個陣列元素nums[i],計算除了nums[i]以外的陣列元素連乘積。 題目的原文敘述 測試範例 Example 1: Input: nums = [1,2,3,4] Output: [24,12,8,6] nums[0] 以
Thumbnail
題目敘述 題目會給定一個整數陣列arr,要求我們判斷是否每個元素的出現次數都不同? 題目的原文敘述 測試範例 Example 1: Input: arr = [1,2,2,1,1,3] Output: true Explanation: The value 1 has 3 occurre
Thumbnail
巢狀迴圈For loop介紹結構及範例說明 巢狀迴圈 巢狀迴圈是在一個迴圈內包含另一個迴圈的結構 簡單來說,就是內迴圈做完,才會在跑到外迴圈,接著在做內迴圈