2014-01-15 175 views
-1

這個問題的Can't understand the behavior of deleting vars in JavaScript爲什麼hasOwnProperty返回true

這是發生在谷歌瀏覽器的擴展: - 案例1:

var x = 5; 
window.x === x // true. x, as it seems, is a property of window 
window.hasOwnProperty('x'); // true 
delete x; // false 
delete window.x; // false; 

案例2:

window.x = 5; 
delete window.x; // true 

案例3:

window.x = 5; 
delete x; // true 

如果CASE 2和3有效(刪除x),那麼CASE1爲什麼不這樣做?我知道刪除只會刪除任何屬性,並且在CASE 1中x是一個不應該是屬性的變量。但是window.hasOwnProperty函數返回true。

在Firefox爲CASE1:hasOwnProperty返回true,並且還刪除X返回true ...

+0

只有當'x'被聲明爲'x = 5;',沒有'var'時,第一種情況纔是'true'。 – thefourtheye

+0

無法使用FF 26.0重現,FF在所有實例上返回true。 – Zeta

+0

但是當我們聲明它爲var x,那麼它也是窗口對象的屬性..所以它應該刪除 –

回答

0

讓我用我的answer

您可以通過VAR創建在全局範圍變量,而不是財產窗口 對象。此var僅與window.x鏈接。然後你比較 window.x === x它會返回true。

另外object.hasOwnProperty(x)檢查什麼對象具有x作爲屬性(經由object.x)不x從原型鏈。

+1

由於此問題已由您的原始答案回答,因此這是原始問題的重複,應該標記爲原來的問題。 – Zeta

+0

我完全同意你..我也認爲samy的方式..但我想這是更依賴於瀏覽器...就像我只是想通了..火狐認爲用不同的方式.. –

+0

@BhaskarMelkani你是怎麼樣與上一個問題完全相同的評論,但你不知道這個問題?你是否從某處複製代碼? – Barmar

相關問題