Object,Object和[1:Object,2:Object]之间有什么区别?

时间:2015-06-28 21:28:08

标签: javascript

我在删除数组中的对象时偶然发现了这一点。

以下是代码:

friends = [];

friends.push(
    {
        a: 'Nexus',
        b: 'Muffin'
    },
    {
        a: 'Turkey',
        b: 'MonkMyster'
    }
    )

console.log(friends);

for(i in friends){
    if(friends[i].a == 'Nexus'){
          delete friends[i];
        friends.push({
            a: 'test',
            b: 'data'
        });
    }
}

console.log(friends);

它也发布在jsfiddle上。

基本上,为什么我console.log的{​​{1}}输出的第一个friends[Object, Object]

但是,当在循环中删除该对象然后向该数组添加新对象时,它会记录:

[1: Object, 2: Object]

1:, 2:究竟是什么意思(显然要为每个对象关联),但我想知道为什么在第一次记录friends之后它不存在?我的朋友阵列中的对象符号是错误的吗?我觉得我创建的初始friends数组错了,JavaScript解析器正在纠正我?

1 个答案:

答案 0 :(得分:6)

因为您删除了第一个项目(没有重新索引)并推送了一个新项目。

最初,你有一个数组,其对象位于第0位,另一个位于第一位。

更改后,你有一个数组,其中一个对象位于第一个位置,另一个位于第二个位置。

因此,控制台只想显示第一个条目位于第1个位置而不是第0个位置。

每个控制台可能会以不同的方式执行此操作,例如在我获得的Firefox上

Array [ <1 empty slot>, Object, Object ]

控制台只是一个调试工具,您可以忽略这些语法。你没有做错任何事。

然而,使用稀疏数组可能有点奇怪。您可以考虑重新索引数组,而不是仅删除属性:

delete array[position];    // Just remove
array.splice(position, 1); // Remove and reindex