为什么数组中的var返回一个字符串索引?
这个问题在这里已经有了答案:
我的朋友,看到原型继承的奇迹和诅咒。 你正在迭代for..in
不是一个数组。 您正在遍历一个Array对象。 看看文档:
数组索引只是具有整数名称的枚举属性,并且与其他常规对象属性相同。 不能保证for ... in将以任何特定顺序返回索引,并且它将返回所有可枚举的属性,包括具有非整数名称和那些被继承的属性。
由于迭代顺序与实现相关,迭代数组可能无法以一致的顺序访问元素。 因此,在遍历访问顺序非常重要的数组上进行迭代时,最好使用带有数字索引(或Array.forEach或for ... of循环)的for循环。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in
所以你要处理的是数组对象中可枚举的“整数名称”属性,而不是数字顺序。
在JavaScript中编辑 for v in array
并不等同于Python for v in list
中的for v in list
。 它相当于for k, v in dict.iteritems()
但是k是以整数名字的形式隐含给你的,比如说“1”,“2”,“3”等等。从面向对象的角度来看也是直观的。 一个列表/数组如何成为一个类似于字典的对象? 但是从原型的角度来看,只要Object.prototype
继承任何东西,它就可以被认为是一个带有键和属性的对象。