为什么JavaScript更改array.push上的数据类型



我正在处理一个小的JavaScript编码挑战,这很简单,但是遇到了一个奇怪的奇怪行为,我在任何地方都找不到记录的。也许有人可以将我指向这是预期行为的地方?

myIntegerArray = [1,2,3,4];
b = new Array();
for(var v in a)
{
    b.push(v);
}
console.log(b); // returns ["1","2","3","4"]. Note String result

如果我要使用 forEach(),但是我得到了一系列数字:

a.forEach(function(element,index,ay)
    {
        b.push(element)
    });
//a console.log(b) will return [1,2,3,4]

您正在推动密钥名称,而不是值。您需要这样做:

b.push(a[v]);

这可能会帮助您理解:

for (var key in obj) {
  var value = obj[key];
  arr.push(value);
}
for(var v in a)

在JavaScript中,数组就像对象一样。for..in循环将获取数组对象的键,即实际数组索引。如我们所知,JavaScript对象键只能是字符串。因此,您实际得到的是字符串格式的数组索引。

不应使用for..in的另一个原因,是MDN文档中。引用for..in

for..in不应用来迭代索引顺序的数组 很重要。数组索引只是枚举的属性 整数名称,否则与一般对象相同 特性。不能保证...在...中会返回 按任何特定顺序索引,它将返回所有枚举 属性,包括具有非刻名人士的属性和 继承。

因为迭代顺序取决于实施,迭代 在数组上可能不会以一致的顺序访问元素。所以 最好使用数字索引(或array.foreach)使用一个循环 或在阵列上迭代时,循环的非标准) 访问顺序很重要。

所以,您要么使用

for(var index = 0; index < array.length; index += 1) {
    array[index];
}

或您在问题本身中显示的forEach

最新更新