为什么javascript会更改Array.push上的数据类型?
我当时正在做一个简单的javascript编码小挑战,但遇到了一些奇怪的行为,我在任何地方都找不到记录。也许有人能告诉我这是预期的行为为什么javascript会更改Array.push上的数据类型?,javascript,Javascript,我当时正在做一个简单的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.forEac
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);
}
在JavaScript中,数组就像对象一样for..in
循环将获取数组对象的键,这些键是实际数组索引。众所周知,JavaScript对象键只能是字符串。因此,您实际得到的是字符串格式的数组索引
另一个不应该在中使用的原因是在MDN文档中。引用
for..in不应用于迭代索引顺序为
这很重要。数组索引只是具有
整数名和在其他方面与常规对象相同
财产。不能保证for…in会退还
索引的任何特定顺序,它将返回所有可枚举的
属性,包括具有非整数名称的属性和
继承的
因为迭代的顺序依赖于实现,所以迭代
在一个数组上,不能以一致的顺序访问元素。所以
最好使用带有数字索引(或Array.forEach)的for循环
或者是非标准的for…of loop),当迭代数组时
访问顺序很重要
所以,你要么使用
for(var index = 0; index < array.length; index += 1) {
array[index];
}
for(变量索引=0;索引
或者您在问题本身中显示的
forEach
。duh!谢谢你帮我解决这个问题!您的代码不会生成该输出。数组将是零索引的,而不是一索引的。啊,你说得对。我又看了一遍我的成绩,结果就是这样。我本应该把我包括进去的,但我被明显的类型改变分心了,完全错过了。
for(var index = 0; index < array.length; index += 1) {
array[index];
}