为什么javascript在迭代时会将数组索引转换为字符串?

时间:2009-12-11 06:24:59

标签: javascript

这个Javascript逻辑让我很困惑。我正在创建一个数组并将其第一个元素设置为数字。当我使用“for”循环进行交互时,Javascript将数组键转换为字符串。为什么?我希望它留下一个数字。

stuff = [];
stuff[0] = 3;

for(var x in stuff) {
    alert(typeof x);
}

6 个答案:

答案 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与数组一起使用?

  1. 它会抓取原型链,它会迭代Array.prototypeObject.prototype中定义的属性。
  2. 无论如何,迭代的顺序 保证。
  3. 有关最近回答的问题的更多详情:

答案 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循环适用于对象,索引是字符串。