这个Javascript逻辑让我很困惑。我正在创建一个数组并将其第一个元素设置为数字。当我使用“for”循环进行交互时,Javascript将数组键转换为字符串。为什么?我希望它留下一个数字。
stuff = [];
stuff[0] = 3;
for(var x in stuff) {
alert(typeof x);
}
答案 0 :(得分:11)
这是因为你使用for...in
循环遍历数组,stuff = [];
stuff[0] = 3;
for(var i=0; i<stuff.length; i++) {
var x = stuff[i];
alert(typeof x);
}
通常用于循环对象的属性。 javascript引擎可能会转换为字符串,因为字符串类型适合于对象属性的名称。
尝试这种更传统的方法:
{{1}}
答案 1 :(得分:5)
for..in
不是为了迭代数组而设计的。改为使用C风格的循环。
参考:MDC
答案 2 :(得分:4)
Javascript中的for .. in
循环遍历对象的属性。在Javascript中,属性名称是字符串,而数组只是具有一堆看起来像数字的属性的对象。
答案 3 :(得分:3)
应使用for...in
语句迭代对象属性,因为Arrays使用简单的for
循环:
var stuff = [];
stuff.push(3);
for(var i = 0; i < stuff.length; i++) {
alert(stuff[i]);
}
为什么不将for...in
与数组一起使用?
Array.prototype
或Object.prototype
中定义的属性。有关最近回答的问题的更多详情:
答案 4 :(得分:2)
避免使用performance-critical函数中的for-in。
The for-in loop requires the script engine to build a list of all the enumerable properties
,并在启动枚举之前检查该列表中的重复项。The for-in loop breaks when you extend Array object using prototype
。答案 5 :(得分:0)
问题是JavaScript在切换到关联数组时非常容易,关联数组实际上不是数组而是对象。然而,for..in
循环适用于对象,索引是字符串。