2014-09-24 60 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]); 
    } 
}