日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
JavaScriptFor循環(huán):使用for,in循環(huán)的技巧你會(huì)了嗎

在本文中,我們將了解for...inJavaScript 提供的循環(huán)。我們將看看for...in循環(huán)在 JavaScript 中是如何使用的、它的語(yǔ)法、它是如何工作的示例、何時(shí)使用它、何時(shí)不使用它,以及我們可以使用哪些其他類型的循環(huán)。

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

在 JavaScript 中,就像在其他編程語(yǔ)言中一樣,我們使用循環(huán)來(lái)讀取或訪問(wèn)集合中的項(xiàng)目。集合可以是數(shù)組或?qū)ο蟆C看伪闅v集合中的項(xiàng)目稱為一次迭代。

有兩種方法可以訪問(wèn)集合中的項(xiàng)目。第一種方法是通過(guò)它在集合中的鍵,它是數(shù)組中的索引或?qū)ο笾械膶傩?。第二種方式是通過(guò)項(xiàng)目本身,而不需要密鑰。

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

JavaScriptfor...in循環(huán)遍歷或迭代集合的鍵。使用這些鍵,您可以訪問(wèn)它在集合中表示的項(xiàng)目。

項(xiàng)目的集合可以是數(shù)組、對(duì)象,甚至是字符串。

for...in 循環(huán)的語(yǔ)法

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

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

在這個(gè)代碼塊中,value是我們正在迭代的項(xiàng)目的集合。它可以是對(duì)象、數(shù)組、字符串等。key將是 中每個(gè)項(xiàng)目的鍵value,在每次迭代時(shí)更改為列表中的下一個(gè)鍵。

請(qǐng)注意,我們使用letorconst來(lái)聲明key。

對(duì)對(duì)象使用 for...in 循環(huán)

在 JavaScript 中使用for...in循環(huán)迭代對(duì)象時(shí),迭代的鍵或?qū)傩?在上面的代碼段中由key變量表示)是對(duì)象自己的屬性。

由于對(duì)象可能通過(guò)原型鏈繼承項(xiàng)目,其中包括對(duì)象的默認(rèn)方法和屬性以及我們可能定義的對(duì)象原型,因此我們應(yīng)該使用hasOwnProperty。

for...in 循環(huán)對(duì)象示例

在以下示例中,我們將循環(huán)以下變量obj:

const obj = {
1: "JavaScript",
3: "PHP",
2: "Python",
4: "Java"
};

在循環(huán)中,我們正在渲染

元素中的屬性和值。

請(qǐng)注意,鍵的迭代順序是升序的(即,從數(shù)字順序開(kāi)始,然后是字母順序)。但是,這個(gè)輸出順序與初始化對(duì)象時(shí)創(chuàng)建的項(xiàng)目的索引順序不同。

對(duì)數(shù)組使用 for...in 循環(huán)

在 JavaScript 中使用for...in循環(huán)迭代數(shù)組時(shí),key在這種情況下將是元素的索引。但是,索引可能會(huì)以隨機(jī)順序迭代。

因此,如果我們上面展示value的循環(huán)語(yǔ)法結(jié)構(gòu)中的變量for...in是一個(gè)包含五個(gè)項(xiàng)目的數(shù)組,則key不能保證為 0 到 4。某些索引可能在其他索引出現(xiàn)之前。本文稍后將解釋有關(guān)何時(shí)可能發(fā)生這種情況的詳細(xì)信息。

For...in 循環(huán)數(shù)組示例

在下面的示例中,我們正在循環(huán)以下變量arr:

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

在循環(huán)中,我們渲染每個(gè)數(shù)組元素的索引和值。

對(duì)字符串使用 for...in 循環(huán)

您可以使用 JavaScriptfor...in循環(huán)遍歷字符串。但是,不建議這樣做,因?yàn)槟鷮⒀h(huán)遍歷字符的索引而不是字符本身。

for...in 循環(huán)字符串示例

在下面的示例中,我們正在循環(huán)以下變量str:

const str = "Hello, World!";

在循環(huán)內(nèi)部,我們渲染每個(gè)字符的鍵或索引,以及該索引處的字符。

何時(shí)使用 for...in 循環(huán)

讓我們看看 JavaScriptfor...in循環(huán)最適合的情況。

使用 JavaScript for...in 循環(huán)迭代對(duì)象

因?yàn)閒or...in循環(huán)只迭代對(duì)象的可枚舉屬性——這是對(duì)象自己的屬性,而不是像toString對(duì)象原型中的屬性——使用for...in循環(huán)來(lái)迭代對(duì)象是很好的。循環(huán)提供了一種for...in簡(jiǎn)單的方法來(lái)迭代對(duì)象的屬性并最終迭代其值。

使用 for...in 循環(huán)進(jìn)行調(diào)試

for...inJavaScript循環(huán)的另一個(gè)很好的用例是調(diào)試。例如,您可能希望將對(duì)象的屬性及其值打印到控制臺(tái)或 HTML 元素。在這種情況下,for...in循環(huán)是一個(gè)不錯(cuò)的選擇。

使用for...in循環(huán)調(diào)試對(duì)象及其值時(shí),應(yīng)始終牢記迭代不是有序的,這意味著循環(huán)迭代的項(xiàng)目順序可以是隨機(jī)的。因此,訪問(wèn)屬性的順序可能與預(yù)期不同。

何時(shí)不使用 JavaScript for...in 循環(huán)

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

數(shù)組的有序迭代

由于使用for...in循環(huán)時(shí)無(wú)法保證迭代中的索引順序,因此如果需要維護(hù)順序,建議不要對(duì)數(shù)組進(jìn)行迭代。

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

因此,例如,如果您有一個(gè)包含四個(gè)項(xiàng)目的數(shù)組,并且您將一個(gè)項(xiàng)目插入位置 3,在現(xiàn)代瀏覽器中,for...in循環(huán)仍將按從 0 到 4 的順序迭代數(shù)組。在 IE 中,當(dāng)使用for...in循環(huán)時(shí),它將迭代最初在數(shù)組中的四個(gè)項(xiàng)目,然后到達(dá)在位置三添加的項(xiàng)目。

在迭代時(shí)進(jìn)行更改

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

因此,如果您在迭代中到達(dá)之前刪除了一個(gè)項(xiàng)目,那么在整個(gè)循環(huán)中根本不會(huì)訪問(wèn)該項(xiàng)目。

同樣,如果您對(duì)屬性進(jìn)行更改,也不能保證該項(xiàng)目不會(huì)再次被重新訪問(wèn)。因此,如果一個(gè)屬性被更改,它可能會(huì)在循環(huán)中被訪問(wèn)兩次而不是一次。

此外,如果在迭代過(guò)程中添加了一個(gè)屬性,那么在迭代過(guò)程中它可能會(huì)被訪問(wèn),也可能根本不會(huì)被訪問(wèn)。

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

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

正如您在上面的示例中看到的,添加的元素沒(méi)有被迭代。

替代循環(huán)類型

因此,在for...in循環(huán)不是最佳選擇的情況下,您應(yīng)該改用什么?讓我們來(lái)看看。

對(duì)數(shù)組使用 for 循環(huán)

使用for循環(huán)永遠(yuǎn)不會(huì)錯(cuò)!JavaScriptfor循環(huán)是循環(huán)數(shù)組元素的最基本工具之一。該for循環(huán)允許您在迭代數(shù)組時(shí)完全控制索引。

這意味著在使用for循環(huán)時(shí),您可以前后移動(dòng)、更改數(shù)組中的項(xiàng)、添加項(xiàng)等等,同時(shí)仍保持?jǐn)?shù)組的順序。

以下語(yǔ)句創(chuàng)建了一個(gè)循環(huán),該循環(huán)遍歷數(shù)組并將其值打印到控制臺(tái)。

for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}

用于數(shù)組和對(duì)象的 forEach 方法

JavaScript 中的forEach是數(shù)組原型上的一個(gè)方法,它允許我們?cè)诨卣{(diào)函數(shù)中迭代數(shù)組的元素及其索引。

回調(diào)函數(shù)是您傳遞給另一個(gè)方法或函數(shù)以作為該方法或函數(shù)執(zhí)行的一部分執(zhí)行的函數(shù)。在forEachJavaScript 中,這意味著每次迭代都會(huì)執(zhí)行回調(diào)函數(shù),接收迭代中的當(dāng)前項(xiàng)作為參數(shù)。

例如,以下語(yǔ)句迭代變量arr并使用以下命令在控制臺(tái)中打印其值forEach:

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

您還可以訪問(wèn)數(shù)組的索引:

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

JavaScriptforEach循環(huán)也可用于通過(guò)使用Object.keys()來(lái)迭代對(duì)象,將要迭代的對(duì)象傳遞給它,這將返回對(duì)象自身屬性的數(shù)組:

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

或者,forEach如果您不需要使用Object.values()訪問(wèn)屬性,則可以直接遍歷屬性的值:

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

請(qǐng)注意,Object.values()以與 相同的順序返回項(xiàng)目for...in。

結(jié)論

通過(guò)使用 JavaScriptfor...in循環(huán),我們可以遍歷對(duì)象的鍵或?qū)傩?。它在迭代?duì)象屬性或調(diào)試時(shí)很有用,但在迭代數(shù)組或?qū)?duì)象進(jìn)行更改時(shí)應(yīng)避免使用。我希望你發(fā)現(xiàn)上面的例子和解釋很有用。


當(dāng)前題目:JavaScriptFor循環(huán):使用for,in循環(huán)的技巧你會(huì)了嗎
URL標(biāo)題:http://m.5511xx.com/article/ccopcoh.html