Javascript 为什么数组中的var返回字符串索引?
我真的很惊讶,在Javascript中:Javascript 为什么数组中的var返回字符串索引?,javascript,arrays,iteration,Javascript,Arrays,Iteration,我真的很惊讶,在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
> 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
(var v=0;v>
1.
2.
3.
但是与python一起使用时,我的想法是。。。在…iteration我的朋友,看看原型继承的奇迹和诅咒吧。您在中用
对..进行迭代的不是数组。您正在迭代数组对象。看一下文档:
数组索引只是具有整数名和
在其他方面与常规对象特性相同。没有
保证for…in将返回任何特定的索引
它将返回所有可枚举属性,包括
使用非整数名称和继承的名称
因为迭代的顺序依赖于实现,所以迭代
在一个数组上,不能以一致的顺序访问元素。所以
最好使用带有数字索引(或Array.forEach)的for循环
或for…of循环)在数组上迭代时
访问非常重要
因此,您要处理的是数组对象中属性的可枚举“整数名”,而不是数字顺序
JavaScript中数组中v的编辑与python中列表中v的编辑并不等价。这相当于dict.iteritems()中k,v的,
但是k被隐式地作为一个字符串,可以说是一个整数名,即“1”、“2”、“3”等等。我认为从面向对象的角度来看,这也是违反直觉的。列表/数组怎么可能是类似dict的对象?但从原型的角度来看,只要任何东西继承自Object.prototype
,它就可以被视为具有键和属性的对象。我的朋友,看看原型继承的奇迹和诅咒吧。您在
中用对..进行迭代的不是数组。您正在迭代数组对象。看一下文档:
数组索引只是具有整数名和
在其他方面与常规对象特性相同。没有
保证for…in将返回任何特定的索引
它将返回所有可枚举属性,包括
使用非整数名称和继承的名称
因为迭代的顺序依赖于实现,所以迭代
在一个数组上,不能以一致的顺序访问元素。所以
最好使用带有数字索引(或Array.forEach)的for循环
或for…of循环)在数组上迭代时
访问非常重要
因此,您要处理的是数组对象中属性的可枚举“整数名”,而不是数字顺序
JavaScript中数组中v的编辑与python中列表中v的编辑并不等价。这相当于dict.iteritems()中k,v的,
但是k被隐式地作为一个字符串,可以说是一个整数名,即“1”、“2”、“3”等等。我认为从面向对象的角度来看,这也是违反直觉的。列表/数组怎么可能是类似dict的对象?但从原型的角度来看,只要任何东西继承自Object.prototype
,它就可以被视为具有键和属性的对象。我的朋友,看看原型继承的奇迹和诅咒吧。您在
中用对..进行迭代的不是数组。您正在迭代数组对象。看一下文档:
数组索引只是具有整数名和
在其他方面与常规对象特性相同。没有
保证for…in将返回任何特定的索引
它将返回所有可枚举属性,包括
使用非整数名称和继承的名称
因为迭代的顺序依赖于实现,所以迭代
在一个数组上,不能以一致的顺序访问元素。所以
最好使用带有数字索引(或Array.forEach)的for循环
或for…of循环)在数组上迭代时
访问非常重要
因此,您要处理的是数组对象中属性的可枚举“整数名”,而不是数字顺序
JavaScript中数组中v的编辑与python中列表中v的编辑并不等价。这相当于dict.iteritems()中k,v的,
但是k被隐式地作为一个字符串,可以说是一个整数名,即“1”、“2”、“3”等等。我认为从面向对象的角度来看,这也是违反直觉的。列表/数组怎么可能是类似dict的对象?但从原型的角度来看,只要任何东西继承自Object.prototype
,它就可以被视为具有键和属性的对象。我的朋友,看看原型继承的奇迹和诅咒吧。您在
中用对..进行迭代的不是数组。您正在迭代数组对象。看一下文档:
数组索引只是具有整数名和
在其他方面与常规对象特性相同。没有
保证for…in将返回任何特定的索引
它将返回所有可枚举属性,包括
使用非整数名称和继承的名称
因为迭代的顺序依赖于实现,所以迭代
在一个数组上,不能以一致的顺序访问元素。所以
最好使用带有数字索引(或Array.forEach)的for循环
或for…of循环)在数组上迭代时
访问非常重要
因此,您要处理的是可枚举的“整数名”