删除对象的属性,仍然通过该对象
问题描述:
我试图效仿的setInterval能够循环:删除对象的属性,仍然通过该对象
var Animator=new (function(){
var jobs={
interval:{}
}
var self=this;
var assignedIntervalNum=0;
this.setInterval=function(func,interval){
jobs.interval[assignedIntervalNum]={
func:func,
latest:Date.now()-interval,
interval:interval
};
assignedIntervalNum++;
return assignedIntervalNum-1;
}
this.clearInterval=function(key){
delete jobs.interval[key];
}
var requestNextFrame=function(){
var now=Date.now();
for (var key in jobs.interval){
if (jobs.interval[key].latest + jobs.interval[key].interval < now){
jobs.interval[key].func();
jobs.interval[key].latest=now;
}
}
setTimeout(function(){requestNextFrame();},1);
}
requestNextFrame();
})();
但我不断收到错误,指出jobs.interval [关键]是不确定的。所以我想删除不会完全删除该属性,但只需将其分配给undefined
!?
对于支持删除对和循环每个对的键/值存储,我有哪些选择?
编辑
我的坏!
在函数func()中存在对clearInterval的调用,所以导致错误的行是jobs.interval [key] .latest = now;刚刚删除之后。
所以是的,JavaScript对象仍然是一个键/值存储,支持通过他们每个人的去除对和循环不错的选择
答
正如在问题中提到,这是一个错误!
答
“删除”不会删除该数组中的对象,它设置对象为未定义的,所以这就是为什么你得到这个错误。
如果想从具有索引i的数组删除对象时,可以使用:
array.splice(i, 1);
其中1是要删除起始于位置i的元素的数量。
如果你想从阵列中删除“数组”的关键一个元素,你可以使用:
for (var i=0; i<array.length; i++){
if (array[i]==key){
array.splice(i, 1);
break;
}
}
是的,它会删除该属性,但访问不存在的属性时会返回默认值undefined。 – 2013-03-03 22:28:20
'delete'确实从对象中删除属性。虽然访问一个未定义的属性默认为'undefined',但你可以通过使用'hasOwnProperty'方法或者'in'运算符来检查一个对象是否有一个属性(区别在于'in'也检查原型链属性...) – hugomg 2013-03-03 22:28:27