2013-02-27 85 views
3

例如:這裏我用var聲明一個變量,然後嘗試刪除它並失敗。能夠刪除非var變量,但不是var聲明的變量?

var derp = "foo";   
\> "foo"  
derp;  
\> "foo"  
this.derp;  
\> "foo"  
delete derp;  
\> false  
derp;  
\> "foo" 

不過,如果我沒有創建一個變種變量,那麼我能夠成功地將其刪除。

perd = "boo";  
\> "boo"  
this.perd;  
\> "boo"  
delete perd;  
\> true  
perd;  
\> undefined 

任何人都可以解釋這種行爲嗎?我確定有一些原因。

+0

[行爲的刪除操作符在javascript中](http://stackoverflow.com/questions/7009115/behavior-of-delete-operator-in-javascript) – 2013-02-27 05:08:19

回答

7

delete運算符不會刪除變量。它僅從對象中移除屬性。

當您使用裸露標識符而未聲明var關鍵字時,它不是變量,而是全局變量的屬性(通常在瀏覽器中爲window)。這就是爲什麼你可以刪除它。

有關您可能想知道的delete運營商的更多信息,請訪問here

+1

請注意,您仍然可以訪問(但不能刪除)當它在全局範圍內用'var'聲明時(如OP中的'this.derp'),一個帶有'globalObject.varName'的變量。 – bfavaretto 2013-02-27 04:32:37

+0

謝謝你簡潔的回答Ted,這個鏈接看起來不錯,我會檢查一下! – 2013-02-27 04:32:57

+1

@bfavaretto - 絕對正確。我的答案最後的鏈接解釋了爲什麼如此。 (這也是爲什麼我的回答在技術上不是100%正確的原因,即使'var x'變量是屬性,它們恰好被標記爲不可刪除,並且當不在全局範圍時,它是一個不可訪問的激活對象的屬性。完全準確的解釋會很難理解。) – 2013-02-27 05:40:15