在 Safari 和 Javascript 中使用 for in(最后一个键值设置为映射)

Using for in with Safari and Javascript (last key value is set to map)

我有一个长度为 3 的数组。

像这样:

var numbers = [4, 5, 6];

并且我想使用 for .. in 循环遍历数组 (Mozilla says: Note: for..in should not be used to iterate over an Array where index order is important.)。但这个问题与索引顺序无关,而是关于在 Safari 中显示为 map 的最后一个键值。

所以我在下面创建了一个测试函数:

var test = function(array) {
  var arr = array.slice(0);

  for(var key in arr){
    console.log(key);
  }
}

Safari returns 0, 1, 2, map.

Chrome returns 0, 1, 2.

野生动物园


Chrome

那么,为什么 Safari 会使用 map 键进行第 4 次迭代,而 chrome 不会呢?谁能解释一下这是怎么回事?

for (x in array) 迭代 array 的所有可迭代属性。它不只迭代数组元素,这正是为什么你不应该使用该形式只迭代数组元素的原因。

显然,您的浏览器版本具有 .map 作为数组对象的可迭代 属性。如果你只是迭代,因为数组应该被迭代:

for (var i = 0; i < array.length; i++)

那么你就不会遇到这个问题,因为这只会迭代数组元素,而不是所有可迭代的属性。