[英]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在调试器中显示以下内容:
- 循环:i = 0; 项目= 123;
- 循环:i = 1; 项目= 456;
- 循环:i = 2; 项目= 789;
- 循环:i =比较;
- 循环:i =联合;
- 循环:i =删除;
- 循环:i =选择;
- 循环:i =包含;
所以我认为这是原型功能。 但为什么? 有任何想法吗?
正如我提到的,我以前从未见过...
不要使用for..in
遍历Array 。 这将遍历Array
对象的所有可枚举属性,并且可能不会按顺序对其进行遍历。 有两种选择:
Array.forEach
(尽管可能有填充程序,但Array.forEach
不支持)。 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) {
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.