我正在处理一个小的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
。