先看一段代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script> // 一个普通的数组 var arr =[3,5,2,6]; // 普通的for 循环遍历 for(var i = 0 ; i < arr.length; i++){ console.log(i,"类型:"+typeof i,arr[i]); } // 用for in 遍历数组 for(var k in arr){ console.log(k,"类型:"+typeof k,arr[k]); } </script> </body> </html>
这段代码显示出了 一点 for循环遍历数组 和for in 循环遍历 数组的一点区别:
标准的for循环中的i是number类型,表示的是数组的下标,但是foreach循环中的i表示的是数组的key是string类型。
这还不是坑,只是一点区别。
再看一段代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script> // 一个普通的数组 var arr =[3,5,2,6]; // 在数组原型上扩展一个方法 Array.prototype.extend = function(){ console.log("在数组原型扩展一个方法"); } // 普通的for 循环遍历 for(var i = 0 ; i < arr.length; i++){ console.log(i,"类型:"+typeof i,arr[i]); } // 用for in 遍历数组 for(var k in arr){ console.log(k,"类型:"+typeof k,arr[k]); } </script> </body> </html>
这段代码就是在上边的代码的基础上,为Array做了一下扩充。很简单,只是添加了一个函数。但是我们来看运行会出现了什么情况:
输出的结果中,多出了一行,这一行就是我们扩展的一个函数,不是我们定义在数组中的值。到此这个问题就出来了。
综上所述,用for...in...在通常情况下确实可以正确运行。
但是如果我们在项目采用的是用foreach遍历数组,假设有一天谁不小心自己为了扩展js原生的Array类,或者引入一个外部的js框架也扩展了原生Array。那问题就来了。
所以最好还是用for循环遍历数组
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
问题内容: 以下是提供输出的代码段:。由于访问列表中的数字3,我期望获得输出。在线给出的解释是“每次迭代中更改的价值”,但我不太了解如何或为什么。任何解释都很好! 问题答案: 这里发生的是一个列表在循环过程中发生了变异。 让我们考虑以下代码片段: 输出为: 每次迭代: 从内部指针当前指向的位置读取值 立即将其分配给列表中的最后一个元素 在最后一个元素打印在标准输出上之后 就像这样: 内部指针指向第
问题内容: 以下代码使我有些困惑: 我不明白的是那key部分。Python如何识别它只需要从字典中读取密钥?是中的特殊字?还是仅仅是一个变量? 问题答案: 5174 只是一个变量名。 只会循环遍历字典中的键,而不是键和值。要遍历键和值,可以使用以下命令: 对于Python 3.x: 对于Python 2.x: 要测试自己,请将单词更改key为poop。 在替换为,它返回由dict支持的类似set的
我是C语言的新手。我已经开始使用向量,并且注意到在我看到的所有通过索引迭代向量的代码中,循环的第一个参数总是基于向量的。Java我可能会使用ArrayList做这样的事情: 我在C语言中看不到这一点有什么原因吗?是不好的做法吗?
问题内容: 因此,我以为我可以像普通对象一样遍历localStorage,因为它具有长度。我该如何循环? 如果我这样做,则返回正确。所以我认为循环会起作用。 我在想类似的东西: 但无济于事。有任何想法吗? 我的另一个想法是 在其中工作。 问题答案: 您可以使用该方法。 返回第一个键(顺序是实现定义的,但是在您添加或删除键之前是恒定的)。 如果顺序很重要,则可以存储JSON序列化数组: 规范草案声称
问题内容: 我正在尝试遍历以下内容 我到目前为止所得到的: 有任何想法吗? 问题答案: 在您的代码中,元素是JSON对象的数组,而不是JSON对象本身。元件,和是JSON的一部分内部对象JSON阵列。 您需要遍历数组 版画 我不知道您的代码片段来自何处。
问题内容: 通常我们这样编码: 但是也可以按照以下方式做一些事情: 我想要这样做的真正原因是因为我想使用python-progressbar的自动检测maxval。他们喜欢 问题答案: 您可以与callable一起使用。(您应该传递两个参数,一个用于可调用对象,另一个用于前哨值) 注意 当没有剩余元素并且没有放置哨兵值时,它将阻塞。另外,就像-循环,并且与普通的容器循环不同,它将从队列中删除项目。
问题内容: 我想知道是否有人可以帮助我创建一个while循环来遍历几个数据库,以便从两列的一个表中获取数据。这是我到目前为止所做的。什么都行不通,因为我不知道如何针对我从每个数据库查询的表来使select语句在每个数据库中正常工作(dbo.tbldoc) 问题答案: 我会考虑使用sp_MSForEachDB,这要容易得多… 编辑:
例如,我有5项: 当我们使用这样的映射方法时: 我们显示所有的项目; 但我只想展示其中的3个项目 我怎么能做到呢?(使用map方法或for方法或其他方法)