在 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++)
那么你就不会遇到这个问题,因为这只会迭代数组元素,而不是所有可迭代的属性。
我有一个长度为 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++)
那么你就不会遇到这个问题,因为这只会迭代数组元素,而不是所有可迭代的属性。