我在删除数组中的对象时偶然发现了这一点.
这是代码:
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解析器正在纠正我?
因为您删除了第一个项目(没有重新索引)并推送了一个新项目.
最初,你有一个数组,其中一个对象位于第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)
| 归档时间: |
|
| 查看次数: |
480 次 |
| 最近记录: |