最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解如何在JavaScript中使用for循環(huán)

 更新時間:2022年11月15日 08:16:33   作者:chuckQu  
循環(huán)允許我們通過循環(huán)數(shù)組或?qū)ο笾械捻棽⒆鲆恍┦虑?。在這篇文章中,我們將了解JavaScript提供的for循環(huán),感興趣的小伙伴可以了解一下

前言

循環(huán)允許我們通過循環(huán)數(shù)組或?qū)ο笾械捻棽⒆鲆恍┦虑?,比如說打印它們,修改它們,或執(zhí)行其他類型的任務(wù)或動作。JavaScript有各種各樣的循環(huán),for循環(huán)允許我們對一個集合(如數(shù)組)進行迭代。

在這篇文章中,我們將了解JavaScript提供的for循環(huán)。我們將看看for...in循環(huán)語句是如何在JavaScript中使用的,它的語法,它如何工作的例子,何時使用它或避免它,以及我們可以使用哪些其他類型的循環(huán)來代替。

為什么使用for循環(huán)

在JavaScript中,就像在其他編程語言中一樣,我們使用循環(huán)來讀取或訪問集合中的項。這個集合可以是一個數(shù)組或一個對象。每當循環(huán)語句在一個集合中的項中循環(huán)時,我們稱之為一個迭代。

有兩種方式可以訪問集合中的項。第一種方式是通過它在集合中的鍵,也就是數(shù)組中的索引或?qū)ο笾械膶傩?。第二種方式是通過集合項本身,而不需要鍵。

for…in循環(huán)的定義

JavaScript的for循環(huán)會或迭代集合中的鍵。使用這些鍵,你就可以訪問它在集合中代表的項。

集合的項可以是數(shù)組,也可以是對象,甚至可以是字符串。

for…in循環(huán)的語法

for循環(huán)具有以下語法或結(jié)構(gòu):

for (let key in value) {
  //do something here
}

在上述代碼塊中,value是我們迭代的項的集合。它可以是對象、數(shù)組、字符串等等。key會是value每一項的鍵,在每次迭代中都會改變到列表中的下一個鍵。

注意,這里我們使用letconst來聲明key

在對象中使用for…in循環(huán)

在JavaScript中使用for...in循環(huán)迭代對象時,其迭代的鍵或者屬性是對象自己的屬性(在上面的示例中,由key變量表示)。

由于對象可能通過原型鏈繼承數(shù)據(jù)項,其中包括對象的默認方法和屬性,以及我們可能定義的對象原型,因此我們應(yīng)該使用hasOwnProperty。

在下面的例子中,我們通過變量obj進行循環(huán),并打印每一個屬性和值:

const obj = {
  "a": "JavaScript",
  1: "PHP",
  "b": "Python",
  2: "Java"
};

for (let key in obj) {
  console.log(key + ": " + obj[key] )
}

// Output:
// "1: PHP"
// "2: Java"
// "a: JavaScript"
// "b: Python"

請注意,鍵的迭代順序是升序的(也就是說,從數(shù)字開始,按數(shù)字的順序,然后是字母,按字母的順序)。然而,這個輸出的順序與初始化對象時創(chuàng)建的項的索引順序不同。

在數(shù)組中使用for…in循環(huán)

在JavaScript中使用for...in循環(huán)來迭代數(shù)組時,在這種情況下,key將是元素的索引。然而,索引可以按隨機順序迭代。

因此,如果我們上面展示的for...in循環(huán)語法結(jié)構(gòu)中的value變量是一個包含五項的數(shù)組,那么key就不能保證是0到4。一些索引可能會在其他索引之前。關(guān)于何時可能發(fā)生這種情況的細節(jié)將在本文后面解釋。

在下面的例子中,我們對arr變量進行循環(huán):

const arr = ["JavaScript", "PHP", "Python", "Java"];

for (let key in arr) {
  console.log(key + ": " + arr[key])
}

// Output:
// "0: JavaScript"
// "1: PHP"
// "2: Python"
// "3: Java"

在循環(huán)中,我們呈現(xiàn)每個數(shù)組元素的索引和值。

在字符串中使用for…in循環(huán)

你可以在JavaScript中使用for…in循環(huán)來循環(huán)字符串。然而,不推薦這么做,因為你將在字符串的索引上循環(huán),而不是字符串本身。

在下面的例子中,我們對str變量進行循環(huán):

const str = "Hello!";

for (let key in str) {
  console.log(key + ": " + str.charAt(key));
}

//Output
// "0: H"
// "1: e"
// "2: l"
// "3: l"
// "4: o"
// "5: !"

在這個循環(huán)中,我們要呈現(xiàn)每個字符的鍵或索引,以及該索引的字符。

讓我們看看JavaScript for…in循環(huán)最適合的情況。

使用for…in循環(huán)迭代對象

因為for...in循環(huán)只迭代對象的可枚舉屬性,也就是對象自有屬性,而不是像toString這樣屬于對象原型的屬性。所以使用for...in循環(huán)來迭代對象是很好的。for...in循環(huán)提供了一個簡單的方法來迭代一個對象的屬性并最終得到它的值。

使用for…in循環(huán)調(diào)試

JavaScript for...in循環(huán)的另一個很好的用例是調(diào)試。比如,你可能想向控制臺或HTML元素打印一個對象的屬性和它的值。在這種情況下,for...in循環(huán)是一個不錯的選擇。

當使用for…in循環(huán)調(diào)試對象以及對象的值時,你應(yīng)該始終記住,迭代是沒有順序的。也就是說,迭代的順序是隨機的。所以,訪問屬性的順序可能與預(yù)期不同。

不使用for…in循環(huán)的情形

現(xiàn)在讓我們來看看for...in循環(huán)不是最佳選擇的情況。

數(shù)組的有序迭代

由于使用for...in循環(huán)時不能保證迭代中的索引順序,如果有必要保持順序,建議不要迭代數(shù)組。

如果你想支持像IE這樣的瀏覽器,這一點尤其重要,因為IE是按照數(shù)組項創(chuàng)建的順序而不是按照索引的順序進行迭代的。這與當前現(xiàn)代瀏覽器的工作方式不同,后者是根據(jù)索引的升序來迭代數(shù)組的。

舉例來說,如果你有一個包含四項的數(shù)組,你在索引3的位置插入了一項,在現(xiàn)代瀏覽器中,for...in循環(huán)仍然會按照從0到4的順序遍歷數(shù)組。 在IE中,當使用for...in循環(huán)時,它將遍歷一開始就在數(shù)組中的四個項目,然后再遍歷在索引3的位置添加的那一項。

迭代時進行更改

對屬性的任何添加、刪除或修改都不能保證有序的迭代。應(yīng)該避免在for...in循環(huán)中對屬性進行更改。這主要是由于它的無序性。

因此,如果你在迭代到達某一項之前刪除它,那么這項在整個循環(huán)中根本就不會被訪問。

同樣地,如果你對一個屬性進行修改,并不能保證這項不會被再次訪問。因此,如果一個屬性被改變,它可能會在循環(huán)中被訪問兩次而不是一次。

除此之外,如果一個屬性在迭代過程中被添加,那么它在迭代過程中可能會被訪問,也可能根本不會被訪問。

由于這些情況,最好避免在for...in循環(huán)中對一個對象進行任何修改、刪除或添加。

下面是一個在for...in循環(huán)中添加元素的例子。我們可以看到第一個循環(huán)的結(jié)果,然后是在第一個循環(huán)中進行添加后的第二個循環(huán)的結(jié)果。

<h2>Before</h2>
<div id="loopResultsBefore"></div>
<h2>After</h2>
<div id="loopResultsAfter"></div>
const beforeDiv = document.getElementById('loopResultsBefore');

const afterDiv = document.getElementById('loopResultsAfter');

const obj = {
  "a": "JavaScript",
  1: "PHP",
  "b": "Python",
  2: "Java"
};

for (let key in obj) {
  beforeDiv.innerHTML += key + ": " + obj[key] + "<br />";
  if (!isNaN(key)) {
    obj[key - 1] = obj[key];
  }
}

for (let key in obj) {
  afterDiv.innerHTML += key + ": " + obj[key] + "<br />";
}

// Before
// 1: PHP
// 2: Java
// a: JavaScript
// b: Python
// After
// 0: PHP
// 1: Java
// 2: Java
// a: JavaScript
// b: Python

正如你在上面的例子中看到的,被添加的元素并沒有被迭代。

for循環(huán)的替代方案

forEach在JavaScript中是數(shù)組原型的一個方法,它允許我們在回調(diào)函數(shù)中遍歷數(shù)組的元素和它們的索引。

回調(diào)函數(shù)是你傳遞給另一個方法或函數(shù)的函數(shù),作為該方法或函數(shù)執(zhí)行的一部分而被執(zhí)行。當涉及到JavaScript中的forEach時,它意味著回調(diào)函數(shù)將在每個迭代中執(zhí)行,接收迭代中的當前項作為參數(shù)。

舉例來說,下面的語句使用forEach迭代arr變量,并在console中打印value

arr.forEach((value) => console.log(value));

你也可以訪問數(shù)組的索引:

arr.forEach((value, index) => console.log(value, index));

JavaScript forEach循環(huán)也可以使用Object.keys()來迭代對象,把你想迭代的對象傳給它,它返回對象的自有屬性數(shù)組:

Object.keys(obj).forEach((key) => console.log(obj[key]));

另外,如果你不需要使用Object.values()來訪問屬性,你可以用forEach來直接循環(huán)屬性的值:

Object.values(obj).forEach((value) => console.log(value));

注意,Object.values()返回項的順序與for...in相同。

總結(jié)

通過使用JavaScript for...in循環(huán),我們可以循環(huán)對象的鍵或?qū)傩?。在迭代對象屬性或進行調(diào)試時,它可能很有用,但在迭代數(shù)組或?qū)ο筮M行修改時,應(yīng)該避免使用for...in循環(huán)。

到此這篇關(guān)于詳解如何在JavaScript中使用for循環(huán)的文章就介紹到這了,更多相關(guān)JavaScript for循環(huán)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaScript使用表單元素驗證表單的示例代碼

    JavaScript使用表單元素驗證表單的示例代碼

    這篇文章主要介紹了JavaScript使用表單元素驗證表單的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • js生成二維碼的示例代碼

    js生成二維碼的示例代碼

    這篇文章主要介紹了js生成二維碼的示例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • js中常見的6種繼承方式總結(jié)

    js中常見的6種繼承方式總結(jié)

    js中的繼承與其說是對象的繼承,但更像是讓函數(shù)的功能和用法的復用,下面這篇文章主要給大家介紹了關(guān)于js中常見的6種繼承方式,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-01-01
  • 初識javascript 文檔碎片

    初識javascript 文檔碎片

    今天遇到一個問題: 我通過 ajax 取回另一個頁面的 Html 。但這些 HTML 我不想直接輸出,想通過 getElementsByName 處理后再輸出相應(yīng)的內(nèi)容。用原生的 javascript怎樣可以處理呢?
    2010-07-07
  • js中鼠標滾輪事件詳解(firefox多瀏覽器)

    js中鼠標滾輪事件詳解(firefox多瀏覽器)

    之前js 仿Photoshop鼠標滾輪控制輸入框取值中已使用js對鼠標滾輪事件進行控制,滾輪事件其中考慮瀏覽器兼容性問題
    2010-02-02
  • [JS]實現(xiàn)動態(tài)增加框架!未完成

    [JS]實現(xiàn)動態(tài)增加框架!未完成

    [JS]實現(xiàn)動態(tài)增加框架!未完成...
    2007-03-03
  • JavaScript數(shù)據(jù)結(jié)構(gòu)Number

    JavaScript數(shù)據(jù)結(jié)構(gòu)Number

    這篇文章主要介紹了JavaScript數(shù)據(jù)結(jié)構(gòu)Number,Number?是JavaScript的基本數(shù)據(jù)結(jié)構(gòu),是對應(yīng)數(shù)值的應(yīng)用類型,下文給大家分享JavaScript使用?Number?的常見問題,需要的朋友可以參考一下
    2022-02-02
  • uniapp項目優(yōu)化方式及建議

    uniapp項目優(yōu)化方式及建議

    性能優(yōu)化自古以來就是重中之重,本文關(guān)于uniapp項目優(yōu)化方式最全整理,會根據(jù)開發(fā)情況進行補充,感興趣的可以了解一下
    2021-08-08
  • ES6 Iterator遍歷器原理,應(yīng)用場景及相關(guān)常用知識拓展詳解

    ES6 Iterator遍歷器原理,應(yīng)用場景及相關(guān)常用知識拓展詳解

    這篇文章主要介紹了ES6 Iterator遍歷器原理,應(yīng)用場景及相關(guān)常用知識拓展,結(jié)合實例形式詳細分析了ES6 Iterator遍歷器具體原理、功能、用法、應(yīng)用場景及知識拓展,需要的朋友可以參考下
    2020-02-02
  • JavaScript中:表達式和語句的區(qū)別[譯]

    JavaScript中:表達式和語句的區(qū)別[譯]

    本文要講的是JavaScript中非常重要的兩個知識點:表達式(expressions)和語句(statements)之間的區(qū)別
    2012-09-09

最新評論

安新县| 康保县| 鄂托克前旗| 平顺县| 教育| 普格县| 乐东| 三明市| 五台县| 大港区| 兴城市| 岳池县| 扎兰屯市| 福泉市| 清丰县| 巴塘县| 白玉县| 阜新| 宁乡县| 革吉县| 连云港市| 平塘县| 滨州市| 历史| 义马市| 台安县| 六盘水市| 界首市| 扎赉特旗| 锦屏县| 体育| 醴陵市| 阿拉善左旗| 遂宁市| 绥德县| 赣州市| 桑日县| 河北省| 景东| 桂林市| 来安县|