Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么数组中的var返回字符串索引?_Javascript_Arrays_Iteration - Fatal编程技术网

Javascript 为什么数组中的var返回字符串索引?

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

我真的很惊讶,在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 
(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循环)在数组上迭代时 访问非常重要

因此,您要处理的是可枚举的“整数名”