【面試題】for...in 和 for...of 的區別

給大家推薦一個實用面試題庫

1、前端面試題庫 (面試必備) ? ? ? ? ? ?推薦:★★★★★

地址:web前端面試題庫

JavaScript 是一門強大而靈活的編程語言,提供了多種迭代對象的方式。兩個常見的迭代方式是?for...in?和?for...of?循環。這兩種循環用于遍歷對象和數組中的元素,但它們有許多重要的區別和適用場景。在本文中,我們將深入探討?for...in?和?for...of?循環的區別,以及何時使用它們。

1.?for...in?循環

for...in?循環是一種用于遍歷對象的屬性的迭代方式。它的語法結構如下:

for (const key in object) {// 執行代碼
}

1.1 遍歷對象屬性

for...in?循環主要用于遍歷對象的屬性,它會將對象的每個可枚舉屬性作為迭代變量?key?的值。

const person = {name: 'John',age: 30,city: 'New York'
};for (const key in person) {console.log(key, person[key]);
}

在上面的示例中,for...in?循環遍歷了?person?對象的屬性,并打印了每個屬性的名稱和值。

1.2 遍歷原型鏈屬性

for...in?循環不僅會遍歷對象自身的屬性,還會遍歷其原型鏈上的屬性。這可能會導致意外的結果,因為你可能會獲取到不是你期望的屬性。

function Person(name) {this.name = name;
}Person.prototype.age = 30;const john = new Person('John');for (const key in john) {console.log(key, john[key]);
}

在上面的示例中,for...in?循環不僅遍歷了?john?對象自身的屬性(name),還遍歷了其原型鏈上的屬性(age)。

1.3 按照隨機順序

for...in?循環不保證按照屬性的順序進行迭代。屬性的順序可能是隨機的,這取決于 JavaScript 引擎的實現。

const colors = {a: 'red',b: 'green',c: 'blue'
};for (const key in colors) {console.log(key, colors[key]);
}

在上面的示例中,屬性的遍歷順序可能是?bac?或其他隨機順序。

1.4 不能直接訪問屬性值

在?for...in?循環中,你需要通過屬性的名稱來訪問屬性的值,這可能會使代碼看起來更加冗長。

const person = {name: 'John',age: 30,
};for (const key in person) {const value = person[key];console.log(key, value);
}

在上面的示例中,我們需要使用?person[key]?來訪問屬性值,而不能直接訪問。

2.?for...of?循環

for...of?循環是一種用于遍歷可迭代對象(如數組、字符串、Map、Set 等)的迭代方式。它的語法結構如下:

for (const element of iterable) {// 執行代碼
}

2.1 遍歷數組元素

for...of?循環非常適合遍歷數組中的元素,它會將數組的每個元素作為迭代變量?element?的值。

const numbers = [1, 2, 3, 4, 5];for (const num of numbers) {console.log(num);
}

在上面的示例中,for...of?循環遍歷了?numbers?數組的元素,并打印了每個元素的值。

2.2 不遍歷對象屬性

與?for...in?循環不同,for...of?循環不會遍歷對象的屬性,它專門用于遍歷可迭代對象。如果你嘗試將對象用于?for...of?循環,將會得到錯誤。

const person = {name: 'John',age: 30,
};for (const value of person) {console.log(value);
}
// TypeError: person is not iterable

在上面的示例中,嘗試遍歷?person?對象會導致類型錯誤,因為對象不是可迭代的。

2.3 按照順序迭代

for...of?循環保證按照對象中元素的順序進行迭代。這意味著遍歷數組時會按照數組的順序進行,不會出現隨機順序的情況。

const colors = ['red', 'green', 'blue'];for (const color of colors) {console.log(color);
}

在上面的示例中,屬性的遍歷順序是?redgreenblue

2.4 直接訪問元素值

在?for...of?循環中,你可以直接訪問可迭代對象的元素值,而不需要使用索引或屬性名稱。

const numbers = [1, 2, 3, 4, 5];for (const num of numbers) {console.log(num);
}

在上面的示例中,我們可以直接訪問?num?變量來獲取數組元素的值,而不需要使用?numbers[num]

4. 總結

for...in?和?for...of?循環都是 JavaScript 中用于迭代的有用工具,但它們有不同的用途和適用場景。了解它們的區別可以幫助你更好地選擇合適的迭代方式。

  • 使用?for...in?循環遍歷對象的屬性,但要注意遍歷原型鏈上的屬性。
  • 使用?for...of?循環遍歷可迭代對象的元素,例如數組、字符串、Map、Set 等,它更直觀且不會遍歷原型鏈屬性。

?給大家推薦一個實用面試題庫

1、前端面試題庫 (面試必備) ? ? ? ? ? ?推薦:★★★★★

地址:web前端面試題庫

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/162118.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/162118.shtml
英文地址,請注明出處:http://en.pswp.cn/news/162118.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Boost獲取當前時間并格式化為字符串

格式化為字符串 時間轉字符串有兩種方法 #include <boost/date_time/posix_time/posix_time.hpp> #include <iostream>std::string getCurrentTime() {boost::posix_time::ptime currentTime boost::posix_time::microsec_clock::local_time(); std::string …

centos 安裝k8s教程(一鍵安裝k8s)

第一步 準備幾臺機器 第二步 K8s Manager 服務器中添加docker支持 安裝教程請查看這個博客 docker 安裝詳細教程 點我 第三步安裝 KuboardSpray 教程在這里 第四步 下載k8s資源包 第五步 安裝k8s 點擊安裝后 顯示如下&#xff1a;等待完成

arduino入門一:點亮第一個led

void setup() { pinMode(12, OUTPUT);//12引腳設置為輸出模式 } void loop() { digitalWrite(12, HIGH);//設置12引腳為高電平 delay(1000);//延遲1000毫秒&#xff08;1秒&#xff09; digitalWrite(12, LOW);//設置12引腳為低電平 delay(1000); }

電腦桌面便簽工具選擇哪一款?

隨著互聯網時代的不斷發展&#xff0c;電腦成為日常工作及辦公中必不可少的工具&#xff0c;通過電腦這款工具&#xff0c;大家可以更好的進行工作、學習等方面的交流&#xff1b;電腦桌面便簽由于可以為大家整合一些工作及學習方面的備忘事項及筆記等&#xff0c;因而深受大家…

獲取驗證碼在倒計時未完成前清除驗證碼

場景&#xff1a; 在點擊獲取驗證碼后&#xff0c;驗證碼開始倒計時&#xff0c;在點擊登錄后&#xff0c;出現彈窗不跳轉頁面。因此在出現彈窗后&#xff0c;即使倒計時沒有結束&#xff0c;也要將倒計時的文字變為重新獲取驗證碼。 template代碼 <div class"form-b…

【Vue】Node.js的下載安裝與配置

目錄 一.下載安裝 官網&#xff1a; 二.環境變量的配置 三.設置全局路徑和緩存路徑 四.配置淘寶鏡像 五.查看配置 六.使用npm安裝cnpm ? 一.下載安裝 官網&#xff1a; https://nodejs.org/en/download 下載完之后&#xff0c;安裝的時候一直點next即可&#xff0c…

FlinkCDC實現主數據與各業務系統數據的一致性(瀚高、TIDB)

文章末尾附有flinkcdc對應瀚高數據庫flink-cdc-connector代碼下載地址 1、業務需求 目前項目有主數據系統和N個業務系統,為保障“一數一源”,各業務系統表涉及到主數據系統的字段都需用主數據系統表中的字段進行實時覆蓋,這里以某個業務系統的一張表舉例說明:業務系統表Ta…

BQL是什么如何使用?

BQL是什么如何使用&#xff1f; BQL來源于Business Query Language &#xff0c;是一種業務查詢語言。是北京碩迪制信科技有限公司根據以往統計分析案例研發的一種語言。特點是通過可視化界面對業務語言進行查詢、聚合、排序等操作&#xff0c;通過BQL引擎轉換為數據庫可執行的…

CSGO游戲搬磚市場下跌分析,是跑還是入?

CSGO市場下跌分析&#xff0c;是跑還是入&#xff1f; 以下所有都是阿陽本人最近幾年觀察市場和踩坑的一點經驗&#xff0c;由于篇幅不長所以肯定會很淺薄&#xff0c;大伙下嘴輕點 。 首先現在真的是CSGO市場最低點嗎&#xff1f;后續還會跌嗎&#xff1f;我們究竟是該繼續觀…

Course1-Week1:機器學習簡介

Course1-Week1&#xff1a;機器學習簡介 文章目錄 Course1-Week1&#xff1a;機器學習簡介1. 課程簡介1.1 課程大綱1.2 Optional Lab的使用 (Jupyter Notebooks)1.3 歡迎參加《機器學習》課程 2. 機器學習簡介2.1 機器學習定義2.2 有監督學習2.3 無監督學習 3. 線性回歸模型3.1…

golang學習筆記——使用映射

文章目錄 使用映射聲明和初始化映射添加項訪問項刪除項映射中的循環 使用映射 Go 中的映射是一個哈希表&#xff0c;是鍵值對的集合。 映射中所有的鍵都必須具有相同的類型&#xff0c;它們的值也是如此。 不過&#xff0c;可對鍵和值使用不同的類型。 例如&#xff0c;鍵可以…

Apach Ozone部署

前言 最近由于工作需要&#xff0c;要部署一套ozone。我自己對hadoop這套體系不是很熟悉&#xff0c;所以過程磕磕碰碰&#xff0c;好不容易勉強搭起來&#xff0c;所以記錄一下部署方式 準備 三臺主機&#xff0c;主機均已安裝jdk、hdfs&#xff0c;相關的安裝配置就不另外寫…

python二叉樹鏈樹_樹的鏈式存儲結構

二叉鏈樹是一種樹狀數據結構&#xff0c;其中每個節點最多有兩個子節點&#xff0c;分別稱為左子節點和右子節點。每個節點包含一個數據元素和指向其左右子節點的指針。二叉鏈樹可以是空樹&#xff0c;也可以是具有以下特點的非空樹&#xff1a; 1. 每個節點最多有兩個子節點。…

netstat

netstat 命令用于顯示網絡狀態 參數說明&#xff1a; -a或--all 顯示所有連線中的Socket&#xff0c;默認不顯示LISTEN相關 -n 拒絕顯示別名&#xff0c;能顯示數字的全部轉化成數字 -e或--extend 顯示網絡擴展信息(User&#xff0c;Inode) -p或--programs 顯示正在使用So…

計算機組成原理 the one day

1.計算機系統硬件軟件 cpu運算器控制器 1個字&#xff08;word&#xff09;16bit&#xff1b; difference 1個字節&#xff08;Byte&#xff09;bit&#xff1b; 2.cpu主頻&#xff08;時鐘頻率&#xff09;1/cpu時鐘周期 CPI執行一條指令所需的時間周期數。 執行一條程序的…

JavaEE 多線程01

為什么引入多線程? 首先進程已經能很好的完成多任務這個情景下的并發編程了,那為什么又引入多線程呢? 這是因為在一些情景下,我么需要大量的創建和銷毀進程來完成一些任務,此時多進程對系統的開銷就會很大了. 假設有這樣一個場景,服務器同時接收到很多個服務請求,這個時候服務…

Python基礎教程: sorted 函數

嗨嘍&#xff0c;大家好呀~這里是愛看美女的茜茜吶 sorted 可以對所有可迭代的對象進行排序操作&#xff0c; sorted 方法返回的是一個新的 list&#xff0c;而不是在原來的基礎上進行的操作。 從新排序列表。 &#x1f447; &#x1f447; &#x1f447; 更多精彩機密、教程…

taro h5 ios解決input不能自動獲取焦點拉起鍵盤

描述&#xff1a;頁面中有個按鈕&#xff0c;點擊跳轉到第二個頁面&#xff08;有input&#xff09;&#xff0c;能直接獲取焦點拉起鍵盤輸入 安卓&#xff1a; 直接用focus() ios&#xff1a; focus無效&#xff0c;必須手動拉起 原理&#xff1a; 點擊按鈕的時候拉起一…

一元三次方程求解——浮點數二分

題目描述 思路 根與根之差的絕對值>1。可以得出距離為1的區間最多只有一個根若存在2個數x1和x2&#xff0c;且x1 < x2&#xff0c;f(x1) x f(x2) < 0&#xff0c;則(x1, x2)之間一定有一個根我們可以遍歷每一個區間為1的范圍&#xff0c;先判斷左端點是否是根&#x…

K8s client go 創建CRD的informer

背景 需要監聽K8s中CRD資源的變動, 做出相應的處理, 需要針對 CRD資源建立informer 實現 dynamicClient 是 創建的K8s的client, 這里使用的是 Unstructured 接収的CRD的結果, 加工的時候使用了convertUnstructuredProject 加工了一下, convertUnstructuredProject 實現下面提…