2014-09-24 62 views
1

也许这是一个天真的问题,但我不得不要求专家的意见...删除一个属性或将其设置为空?

我经常在指示对象的状态的对象中使用临时属性。其中一个州是何时财产评估为false。例如:

// inside some method: 
this.timer = setTimeout(function() { 
    console.log('hello world'); 
}, 1000); 

... 

// inside another method: 
if (this.timer) { 
    clearTimeout(this.timer); 
    this.timer = null; 
} 

当我清楚我的计时器,我可以分配null它就像我上面做,或者我可以从对象中删除:

delete this.timer; 

我不知道哪条路是优选的。删除属性而不是将其设置为null有什么缺点?

编辑:

当然我知道,当我删除属性,该属性将消失,当我把它设置为nullundefined它仍然存在。问题在于,在上述情况下删除财产是一种公认​​的做法。我想不是因为它更慢...

+1

您可以使用此检查。删除可能是一个矫枉过正的问题。 null可能是更好的选择,因为你可能会重新使用属性。你不必每次都重新创建属性。 – 2014-09-24 07:23:32

+2

这取决于,如果你打算以后使用'timer'属性的话。如果没有,您也可以删除它。如果你要分配一个新的定时器,或者你需要检查'timer'是否存在,那么最好将它设置为'null'。 – Teemu 2014-09-24 07:31:29

回答

2

删除属性删除属性,而将其设置为空使它... null。这两个概念是不同的:

  • 随着删除属性,你推断的计时器不再存在
  • 将其设置为null会推断计时器不再具有值,但仍然存在。
+1

'删除this.timer'不是'this.timer = undefined'和'this.timer = null'。 'undefined'也是一个值,比如'null'。但是一种类型的值可能是未定义的:'typeof(this.timer)==“undefined”' – 2014-09-24 07:26:02

0

随着delete this.timer,您删除当前this对象的timer键→键不存在了。

使用this.timer = null,您将null值分配给timer密钥→密钥仍然存在。

如果你改变你的this对象JSON的timer可以在这里与否,同为for (key in this) {…}

0

delete真的会从它的主人取出的财产,你的代码是this对象。
但设置属性为nullundefined不会这样做。从性能上来看

for(var i in obj) { 
    if (obj.hasOwnProperty(i)) { 
     console.log(i, '' + obj[i]); 
    } 
}