2011-05-13 139 views
5

根據EcmaScript規範,由於DontDelete內部參數,某些對象屬性無法刪除。例如:JavaScript對象的DontDelete屬性

var y = 5

不應該刪除的。但從我能夠檢查 - 這是。

這裏是在Mozilla開發者中心的鏈接: https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special/delete

爲什麼這是行不通的,因爲它應該任何想法?

+2

http://perfectionkills.com/2010/01/猜它已解決 – elreyano 2011-05-13 07:15:16

回答

0

有時您必須檢查您閱讀的內容。 ECMA規範中沒有DontDelete內部參數(262,ed 5)。也許[Configurable]屬性是指?該delete操作上的變量或函數不能正常工作,它適用於對象的屬性:

var y=5, 
    z = {y:5}; 
delete y; 
delete z.y; 
alert(y); //=> 5 
alert(z.y); //=> undefined 

從我的答案,這SO question出現,並從T.J.一個很好的答案克勞德。

+0

從我能夠理解它允許刪除全部變量聲明不使用'var',因爲它們是全局對象的屬性。 – elreyano 2011-05-13 07:16:32

+0

這就是你會想的,但它不會那樣工作。 – KooiInc 2011-05-13 07:22:16

+0

@elreyano:看到我除了答案 – KooiInc 2011-05-13 07:29:32

0
var y = 5 
alert(delete (y)); 

顯示false。然後,不能刪除。

+0

在Firebug =/ – tradyblix 2011-05-13 06:56:26

+0

中返回true這是另一個故事..在chrome/ff /即。 – ariel 2011-05-13 06:58:34

+0

它爲我返回false。我還創建了自己的測試頁面,並確認'y'在'delete'後仍然存在。 – TNi 2011-05-13 06:59:09

1

根據ES5表17:

CreateMutableBinding(N,d) 在 環境記錄創建一個新的可變綁定。字符串值N 是綁定名稱的文本。如果 可選的布爾參數D爲真 ,則綁定可能會隨後被刪除,其中 。

和在10.5聲明綁定實例化

  1. 對於每個代碼VariableDeclaration和VariableDeclarationNoIn d,在 源文本順序做 [...] II。調用env的SetMutableBinding 具體方法傳遞dn,undefined, 和strict作爲參數。

這對我說,聲明的變量應該是不可刪除的。在全局代碼中,全局對象是變量obejct的激活對象,所以聲明的全局變量不應該是可刪除的。當然,瀏覽器可能不會堅持...

+0

請注意,'SetMutableBinding'不會設置「刪除」標誌。你的第二個報價似乎與第一個報價無關。 – Guss 2014-09-29 08:58:51

+0

這有點舊,但可能需要更新。第一個涉及如何聲明函數和變量由* CreateMutableBinding *創建,第二部分是如何調用的,是的,它應該引用* CreateMutableBinding *。我會盡快更新。 – RobG 2014-09-29 13:17:38

+0

我認爲正確的10.5小節是8.c.ii – Guss 2014-09-30 06:58:17