简介For循环允许我们遍历数组或对象中的项目,并执行诸如打印它们、修改它们或执行其他类型的任务或操作等操作。JavaScript有各种循环,for循环允许我们遍历一个集合(例如数组)。在本文中,我们将了解JavaScript提供的for循环。我们将了解for...in循环语句在JavaScript中的使用方式、语法、工作原理示例、何时使用或避免使用它,以及我们可以使用哪些其他类型的循环。为什么使用For循环在JavaScript中,就像在其他编程语言中一样,我们使用循环来读取或访问集合中的项目。这个集合可以是一个数组或一个对象。每当循环语句循环遍历集合中的项目时,我们将其称为迭代。有两种方法可以访问集合中的项目。第一种方式是通过它在集合中的键,它是数组中的索引或对象中的属性。第二种方式是通过收藏品本身,没有钥匙。for...in循环的定义JavaScript的for循环将遍历集合中的键。使用这些键,您可以访问它在集合中代表的项目。集合的项目可以是数组、对象,甚至是字符串。for...in循环的语法for循环具有以下语法或结构:for(letkeyinvalue){//dosomethinghere}在上面的代码块中,value是我们迭代的项目集合。它可以是对象、数组、字符串等。key将是每个值项的键,在每次迭代时更改为列表中的下一个键。请注意,这里我们使用let或const来声明密钥。在对象中使用for...in循环当在JavaScript中使用for...in循环迭代对象时,它迭代的键或属性是对象自身的属性(在上面的示例中,由键表示多变的)。由于对象可能会通过原型链继承数据项,其中包括对象的默认方法和属性,以及我们可能定义的对象原型,因此我们应该使用hasOwnProperty。在下面的示例中,我们遍历变量obj并打印每个属性和值:constobj={"a":"JavaScript",1:"PHP","b":"Python",2:"Java"};for(letkeyinobj){console.log(key+":"+obj[key])}//Output://"1:PHP"//"2:Java"//"a:JavaScript"//"b:Python"请注意,键按升序迭代(即从数字开始,按数字顺序,然后是字母,按字母顺序)。但是,此输出的顺序与初始化对象时创建的项目的索引顺序不同。在数组中使用for...in循环当在JavaScript中使用for...in循环遍历数组时,在这种情况下,键将是元素的索引。但是,索引可以按随机顺序迭代。因此,如果我们上面显示的for...in循环语法结构中的值变量是一个包含五项的数组,则不能保证键是0到4。某些索引可能在其他索引之前。本文稍后将解释有关何时可能发生这种情况的详细信息。在下面的示例中,我们遍历arr变量:constarr=["JavaScript","PHP","Python","Java"];for(letkeyinarr){console.log(key+":"+arr[key])}//Output://"0:JavaScript"//"1:PHP"//"2:Python"//"3:Java"在循环中我们渲染每个数组元素的索引和值。在字符串中使用for...in循环您可以在JavaScript中使用for...in循环来遍历字符串。但是,不建议这样做,因为您将遍历字符串的索引,而不是字符串本身。在下面的例子中,我们遍历str变量:conststr="Hello!";for(letkeyinstr){console.log(key+":"+str.charAt(key));}//输出//"0:H"//"1:e"//"2:l"//"3:l"//"4:o"//"5:!"在这个循环中,我们要渲染每个字符的键或索引,以及该索引处的字符。让我们看看JavaScriptfor...in循环最适合的情况。使用for...in循环来迭代对象是因为for...in循环只迭代对象的可枚举属性,即对象自身的属性,而不是像toString那样的属于对象原型的属性。所以使用for...in循环来迭代对象是可以的。for...in循环提供了一种简单的方法来遍历对象的属性并最终获取其值。使用for...in循环调试JavaScriptfor...in循环的另一个重要用例是调试。例如,您可能希望将对象的属性及其值打印到控制台或HTML元素。在这种情况下,for...in循环是一个不错的选择。当使用for...in循环来调试对象及其值时,您应该始终牢记迭代是乱序的。也就是说,迭代的顺序是随机的。因此,访问属性的顺序可能与预期的不同。不使用for...in循环的情况现在让我们看看for...in循环不是最佳选择的情况。数组的有序迭代由于使用for...in循环时无法保证迭代中索引的顺序,如果需要保持顺序,建议不要迭代数组。如果您想支持像IE这样的浏览器,这一点尤其重要,这些浏览器按照创建顺序而不是索引顺序遍历数组项。这与当前现代浏览器的工作方式不同,现代浏览器按索引的升序遍历数组。例如,如果您有一个包含四个项目的数组,并在索引3处插入一个项目,则for...in循环仍将在现代浏览器中按从0到4的顺序遍历该数组。在IE中,当使用for...in循环时,它首先遍历数组中的四个项目,然后遍历在索引3处添加的项目。迭代时更改任何添加、删除或对属性的修改并不能保证有序的迭代。应避免在for...in循环中更改属性。这主要是由于其无序的性质。因此,如果您在迭代之前删除一个项目,则在整个循环中根本不会访问该项目。同样,如果您修改了一个属性,也不能保证它不会被再次访问。因此,如果一个属性被更改,它可能会在循环中被访问两次而不是一次。除此之外,如果在迭代期间添加了属性,则在迭代期间可能会或可能不会访问它。由于这些情况,最好避免在for...in循环中对对象进行任何修改、删除或添加。下面是在for...in循环中添加元素的示例。我们可以看到第一次循环的结果,然后是第一次循环加完后第二次循环的结果。
