为什么“for.in”循环中的数字数组索引的类型被视为字符串
Why does the typeof a numerical array index in a "for..in" loop considered a string?
我注意到在 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
?
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
属性,但它实际上不是数组中的元素。
数组
本质上是具有托管索引键集的对象。
由于对象中的每个键都是字符串类型,因此它也是一个字符串。
将您的阵列视为:
{"0" : "foo" , "1" : "bar"}
所以你的
for(i in s_array){ alert(typeof(i)); }
可以理解为
对于s_array中的每个键
在 js 数组中,数组是高级的、类似列表的对象(关联数组)。
索引最终被JavaScript引擎强制转换为字符串,无论如何,通过隐式toString转换。
来源: MDN
相关文章:
- 名称输入的索引
- 在jQuery中获取表的行索引
- 测试索引值是否等于某个数字的倍数
- 循环遍历数组中的特定索引
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- 按照选项卡索引的顺序循环一个jQuery选择
- 如何在DOM元素上按类型构建此函数
- 如何在javascript中的单个对象中推送类似的索引类型键
- 未捕获的类型错误:无法读取 null(索引):110 的属性“样式”
- 根据标签类型获取页面中元素的索引
- 为什么“for.in”循环中的数字数组索引的类型被视为字符串
- 在数组中添加和减去数字索引值的类型转换
- 查找特定类型的元素相对于整个页面的索引
- JavaScript for loop:为什么在这种情况下索引字符串的类型
- Jquery获取相同类型的索引
- 未能执行'postMessage'在'敬业员工全球范围':索引0处的值没有可转移类型
- 我如何添加一个新的索引到列类型的数组
- 如何使用JSON类型索引从JSON变量中获取数据
- 如何在 javascript 中只有两种类型的项目 0、1 的数组中最有效地查找项目的索引
- 我将ajax传递给php,数据类型为JSONP,但在php文件中显示未定义的索引