数组上的 for.in 循环也会遍历原型函数
for..in loop over an Array iterates also over the prototype functions
我有一个严重的错误,我以前从未见过。首先,我有一个简单的数组:
var myArray = ["123", "456", "789"]
现在我想用一个 for.. 迭代这个数组。在 - 循环中:
function mapData(list) {
for ( var i in list) {
var item = list[i];
if (item) {
// do something
}
}
}
使用 mapData(myArray) 调用该方法后,firebug 在调试器中显示以下内容:
- 循环:i = 0; 项目 = 123;
- 循环:i = 1; 项目 = 456;
- 循环:i = 2; 项目 = 789;
- 循环:i = 比较;
- 循环:i = 联合;
- 循环:i = 删除;
- 循环:i = 选择;
- 循环:i = 包含;
所以我认为这是原型功能。但是为什么?有什么想法吗?
正如我所提到的,我以前从未见过这个...
不要使用 for..in
遍历 Array。 这将循环访问Array
对象的所有可枚举属性,并且可能不会按顺序迭代它们。 有两种选择:
-
Array.forEach
(IE8-不支持,尽管可能有填充程序)。 - 一个简单的
for
循环
这不是
错误,您只是遍历所有可枚举的数组属性,并且您使用添加函数的库Array.prototype
如下所示:
Array.prototype.union = function(...)
可以通过使用 defineProperty 设置函数来使函数不可枚举来修复库:
Object.defineProperty(Array.prototype, 'union', {value:function(){...}});
但切勿使用 for..in
遍历数组。
像这样迭代:
for (var i=0; i<list.length; i++) {
或者像这样:
for (let item of list) {
相关文章:
- 循环遍历以数组为值的Javascript对象
- 遍历类元素数组,并在jquery中选择同级元素
- Jquery遍历表元素
- Chrome扩展:遍历不同的页面并收集数据
- 如何遍历包含对象的数组-javascript
- 遍历 JSON 对象并检查 URL 是否以某个值结尾
- 遍历AngularJs中的对象
- JQuery 遍历当前 SELECT 值
- 循环遍历包含另一个表单的表单
- 使用Yadda和Protractor重用步骤定义,遍历所需文件
- 遍历D3中所有数据点之间的所有值
- 自动遍历所有链接的事件
- JS.循环遍历多维数组,以计数元素在每列中的出现次数
- 若将Array对象添加到Array原型中,则不遍历该对象的函数
- 数组上的 for.in 循环也会遍历原型函数
- 原型/对象语句和链遍历需要澄清
- 为什么for.in循环不遍历对象's原型
- 使用constructor.prototype遍历原型链
- 是否有一个等于hasOwnProperty()的方法可以遍历原型链
- 如何遍历对象的原型链中的所有属性