我注意到在Javascript中,用作for..in
循环中的索引的变量将始终为string
,即使我按以下方式定义它:
var s_array = new Array();
s_array[0] = 'foo';
s_array[1] = 'bar';
for(i in s_array){
alert(typeof(i)); // String
}
为什么它被视为string
而不是number
?
答案 0 :(得分:8)
for(x in y)
语法用于迭代对象的属性(而不是数组的索引),并且属性名称始终存储为字符串。
它也适用于数组这一事实是数组元素作为数组对象属性的副作用。
要了解其中的差异,请考虑以下代码:
var s_array = new Array();
s_array[0] = 'foo';
s_array[1] = 'bar';
s_array['foo'] = 'bar';
console.log("Object:");
for(i in s_array) {
console.log(i);
}
console.log("Array:");
for(var i = 0, l = s_array.length; i < l; i++) {
console.log(i);
}
提供以下输出:
Object:
0
1
foo
Array:
0
1
对象上有一个foo
属性,但它实际上并不是数组中的元素。
答案 1 :(得分:2)
数组本质上是具有托管键索引集的对象。
由于对象中的每个键都是string类型,因此它也是一个字符串。
将您的数组视为:
{"0" : "foo" , "1" : "bar"}
所以你的
for(i in s_array){ alert(typeof(i)); }
可以读作
表示s_array中的每个键
答案 2 :(得分:2)