繁体   English   中英

数组上的for..in循环还会迭代原型函数

[英]for..in loop over an Array iterates also over the prototype functions

我有一个严重的错误,以前从未见过。 首先,我有一个简单的数组:

var myArray = ["123", "456", "789"]

现在,我想使用for..in-循环遍历此数组:

function mapData(list) {
for ( var i in list) {
    var item = list[i];
    if (item) {
      // do something
    }
  }
}

用mapData(myArray)调用方法后,firebug在调试器中显示以下内容:

  1. 循环:i = 0; 项目= 123;
  2. 循环:i = 1; 项目= 456;
  3. 循环:i = 2; 项目= 789;
  4. 循环:i =比较;
  5. 循环:i =联合;
  6. 循环:i =删除;
  7. 循环:i =选择;
  8. 循环:i =包含;

所以我认为这是原型功能。 但为什么? 有任何想法吗?

正如我提到的,我以前从未见过...

不要使用for..in遍历Array 这将遍历Array对象的所有可枚举属性,并且可能不会按顺序对其进行遍历。 有两种选择:

那不是一个错误,您只需要遍历所有可枚举的数组属性,就可以对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) {

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM