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

NiC*_*man 5 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);
Run Code Online (Sandbox Code Playgroud)

它也发布在jsfiddle上.

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

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

[1: Object, 2: Object]

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

Ori*_*iol 6

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

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

在更改之后,您有一个数组,其中一个对象位于第一个位置,另一个位于第二个位置.

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

每个控制台都可以这样做,例如在我得到的Firefox上

Array [ <1 empty slot>, Object, Object ]
Run Code Online (Sandbox Code Playgroud)

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

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

delete array[position];    // Just remove
array.splice(position, 1); // Remove and reindex
Run Code Online (Sandbox Code Playgroud)