为什么使用字符串作为数组的键,控制台显示没有这些声明值的数组,并且在不显示键为字符串的值时进行迭代?虽然我可以获得它们的价值。
>> var arr = [ 0, 1, 2, 3 ];
undefined
>> arr["something"] = "aught";
"aught"
>> arr
[0, 1, 2, 3]
>> arr["something"]
"aught"
>> for( var i = arr.length; i--; console.log( arr[ i ] ) );
3
2
1
0
我理解数组是在javascript引擎中实现了某种“枚举”接口的对象。
最有趣的是,解释器不会抛出警告或错误所以我花了一些时间来搜索数据丢失的位置。
我现在,我错了,我用[]
代替{}
答案 0 :(得分:79)
在javascript中有两种类型的数组:标准数组和关联数组
[ ]
- 标准数组 - 仅基于0的整数索引{ }
- 关联数组 - 其中键可以是任何字符串的javascript对象所以当你定义:
var arr = [ 0, 1, 2, 3 ];
您正在定义一个标准数组,其中索引只能是整数。当你执行arr["something"]
时something
(你用作索引)不是一个整数,你基本上是为arr
对象定义一个属性(一切都是javascript中的对象)。但是你没有在标准数组中添加元素。
答案 1 :(得分:11)
for( var i = arr.length; i--; console.log( arr[ i ] ) );
当然,这只会给你数字索引,但你仍然可以循环遍历数组的和字符串键,如下所示:
for (var x in arr) {
console.log(x + ": " + arr[x]);
}
/* (console output):
0: 0
1: 1
2: 2
3: 3
something: aught
*/