Why for var在数组中返回一个字符串索引
Why for var in array returns a string index?
我真的很惊讶,在Javascript中:
> vals = ["a", "b", "c"]
> for (v in vals) console.log(v + 1)
01
11
21
这是因为:
> for (v in vals) console.log(typeof(v))
string
string
string
所以我不得不做这样的事情:
> for (v in vals) console.log(parseInt(v) + 1)
1
2
3
为什么会发生这种情况
我知道我能做
> for (var v = 0; v < vals.length; v++) console.log(v + 1)
1
2
3
但与python一起使用时,我的想法是使用for ... in ...
迭代
我的朋友,看看原型继承的奇迹和诅咒吧。使用for..in
迭代的不是数组。您正在对Array对象进行迭代。看看文档:
数组索引只是具有整数名称和在其他方面与常规对象属性相同。没有保证。。。in将返回任何特定的索引order,它将返回所有可枚举属性,包括具有非整数名称和继承的名称。
因为迭代的顺序取决于实现在数组上可能不会以一致的顺序访问元素。因此最好使用带有数字索引的for循环(或Array.forEach或for。。。循环),其中访问很重要。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in
因此,您要处理的是Array对象中属性的可枚举"整数名称",而不是数字顺序。
EDITJavaScript中的for v in array
与python中的for v in list
不等价。它相当于for k, v in dict.iteritems()
,但k隐含地作为一个具有整数名称的字符串提供给您,例如"1"、"2"、"3"等。我认为从OO的角度来看,这也是违反直觉的。列表/数组怎么可能是一个类似dict的对象?但从原型的角度来看,只要任何东西继承自Object.prototype
,它就可以被视为具有键和属性的对象。
相关文章:
- 多维关联数组的最后一个索引
- 使用Handlebars获取同级JSON数据,其中单个对象没有父索引键,但多个项有一个索引键
- 如何移动到数组的上一个/下一个索引键
- JavaScript更新最后一个索引类数据
- 如何避免在将索引作为函数的参数发送时引用for循环中的最后一个索引
- 只滚动一个(z索引)层
- 使用 jQuery 创建动态元素 单击事件始终返回 for 循环中的最后一个索引
- 在Javascript中,有没有一种方法可以用一个语句创建一个索引对象数组
- 在 jQuery 中从某个索引循环访问列表到另一个索引
- 如何在一个索引不等于2的ul中获取li,我知道如何获得索引gt或lt 2
- 如何检查下一个索引是否存在 - LODASH
- 调用索引.php从另一个索引.php不同的目录
- 从一个索引.html页面重定向到 2 个网址
- 如何使用 Java 脚本中的最后一个索引删除子字符串
- 如何允许另一个索引字符串运行脚本
- 创建一个索引数组,该数组的索引值为 JavaScript 中最常见的数组值
- 循环的JQuery卡在最后一个索引处
- 在循环中,I'm附加了一个标记,提醒循环索引计数.为什么它总是提醒循环的最后一个索引
- 如何在$.each数组中查找下一个索引项
- 仅在最后一个索引处检查foreach中的if条件