循环允许我们遍历数组或对象中的项目,并执行诸如打印它们、修改它们或执行其他类型的任务或操作等操作。JavaScript中有多种循环,其中一种是for...in循环。在本文中,我们将研究for...inJavaScript提供的循环。我们将了解for...in循环在JavaScript中的使用方式、它的语法、它如何工作的示例、何时使用它、何时不使用它,以及我们可以使用哪些其他类型的循环。为什么使用循环在JavaScript中,与在其他编程语言中一样,我们使用循环来读取或访问集合中的项目。集合可以是数组或对象。每次通过集合中的项目称为迭代。有两种方法可以访问集合中的项目。第一种方式是通过它在集合中的键,它是数组中的索引或对象中的属性。第二种方式是通过项目本身,不需要密钥。for...in循环的定义JavaScriptfor...in循环或迭代集合的键。使用这些键,您可以访问它在集合中代表的项目。项的集合可以是数组、对象,甚至是字符串。for...in循环的语法循环具有以下for...in语法或结构:for(letkeyinvalue){//dosomethinghere}迭代。它可以是对象、数组、字符串等。key将是中每个项目的键值,在每次迭代时更改为列表中的下一个键。请注意,我们使用letorconst来声明密钥。在对象上使用for...in循环在JavaScript中使用for...in循环迭代对象时,迭代的键或属性(由上面代码片段中的键变量表示)是对象的属性本身。由于对象可能通过原型链继承项,原型链包括对象的默认方法和属性以及我们可能定义的对象原型,因此我们应该使用hasOwnProperty。for...in循环对象示例在下面的示例中,我们将遍历以下变量obj:constobj={1:"JavaScript",3:"PHP",2:"Python",4:"Java"};在循环内部,我们正在渲染
元素内部的属性和值。请注意,键按升序迭代(即,从数字顺序开始,然后是字母顺序)。但是,此输出顺序与初始化对象时创建的项目的索引顺序不同。对数组使用for...in循环在JavaScript中使用for...in循环遍历数组时,在这种情况下,键将是元素的索引。但是,索引可能会以随机顺序迭代。因此,如果我们上面显示的循环语法结构中的变量for...in是一个包含五项的数组,那么key并不能保证是0到4。某些索引可能会出现在其他索引之前。本文稍后将解释有关何时可能发生这种情况的详细信息。For...in循环数组示例在下面的示例中,我们在以下变量arr上循环:constarr=["Javascript","PHP","Python","Java"];在循环中我们渲染每个数组元素的索引和值。对字符串使用for...in循环您可以使用JavaScriptfor...in循环来遍历字符串。但是,不推荐这样做,因为您将遍历字符的索引而不是字符本身。for...in循环字符串示例在下面的示例中,我们在以下变量str上循环:conststr="Hello,World!";在循环内部,我们渲染每个字符的键或索引,以及字符。何时使用for...in循环让我们看看JavaScriptfor...in循环何时最适合。使用JavaScriptfor...in循环来迭代对象,因为for...in循环只迭代对象的可枚举属性-这是对象自己的属性,而不是对象原型中的属性,如toString-使用for...in循环遍历对象很好。循环提供了一种for...in简单的方法来遍历对象的属性并最终遍历它的值。使用for...in循环调试for...inJavaScript循环的另一个重要用例是调试。例如,您可能希望将对象的属性及其值打印到控制台或HTML元素。在这种情况下,for...in循环是一个不错的选择。当使用for...in循环调试对象及其值时,您应该始终牢记迭代是无序的,这意味着循环迭代的项的顺序可以是随机的。因此,访问属性的顺序可能与预期的不同。何时不使用JavaScriptfor...in循环现在让我们看看for...in循环不是最佳选择的情况。数组的有序迭代由于使用for...in循环时无法保证迭代中的索引顺序,如果需要保持顺序,建议不要对数组进行迭代。如果你想支持像IE这样的浏览器,这一点尤其重要,IE浏览器按照项目的创建顺序而不是索引的顺序迭代项目。这与当前现代浏览器的工作方式不同,后者根据索引以升序迭代数组。因此,例如,如果您有一个包含四个项目的数组,并且您在位置3插入一个项目,在现代浏览器中,for...in循环仍会将数组从0迭代到4。在IE中,当使用一个for...in循环,它遍历数组中的前四项,然后到达位置三添加的项。迭代时的更改对属性的任何添加、删除或修改都不能保证有序迭代。for...in应该避免在循环中改变属性。这主要是由于其无序的性质。因此,如果您在迭代中到达某个项目之前将其删除,则在整个循环中根本不会访问它。此外,如果您对属性进行了更改,则无法保证不会再次访问该项目。因此,如果一个属性被更改,它可能会在循环中被访问两次而不是一次。此外,如果在迭代期间添加属性,则在迭代期间可能会或可能根本不会访问它。由于这些情况,最好避免在for...in循环中对对象进行任何更改、删除或添加。for...in这是在循环中添加元素的示例。我们可以看到第一个循环的结果,然后在第一个循环中添加后的第二个循环。正如您在上面的示例中看到的,添加的元素没有被迭代。替代循环类型那么,如果for...in循环不是最佳选择,您应该使用什么来代替?让我们来看看。对数组使用for循环for循环永远不会出错!JavaScriptfor循环是循环遍历数组元素的最基本工具之一。这个for循环允许您在遍历数组时完全控制索引。这意味着当使用for循环时,您可以前后移动、更改数组中的项、添加项等,同时仍保持数组的顺序。以下语句创建一个循环遍历数组并将其值打印到控制台。for(leti=0;i
console.log(value));您还可以访问数组的索引:arr.forEach((value,index)=>console.log(value,index));JavaScriptforEach循环也可用于通过使用Object.keys()来迭代对象,将要迭代的对象传递给它,返回对象自身属性的数组:Object。keys(obj).forEach((key)=>console.log(obj[key]));或者,forEach如果不需要使用Object.values()访问属性,可以直接遍历属性的值:Object.values(obj).forEach((value)=>console.log(value));请注意,Object.values()以与for...in相同的顺序返回项目。结论通过使用JavaScriptfor...in循环,我们可以迭代对象的键或属性。它在遍历对象属性或调试时很有用,但在遍历数组或更改对象时应避免使用。我希望你发现上面的例子和解释有用。