2012-08-27 33 views
4

我就for有點困惑 - in循環:爲什麼'undefined`不出現在for ... in循環中?

window.hasOwnProperty(undefined) // Returns true 

undefined in window // Returns true 

但下面不打印Undefined is in window!

for(a in window) { 
    if(a === 'undefined') 
     console.log('Undefined is in window!'); 
} 

爲什麼不undefined出現在for - in循環?

回答

7

這不是一個枚舉屬性。在現代的JavaScript引擎中,你可以在自己的對象中控制它,但它總是如此(可能不是在每個解釋器中)「本地」對象可以從「迭代」中「隱藏」屬性。

您可以在MDN的地址閱讀Object.defineProperty()。我不確定是否會有一種語法(在Harmony中)將屬性標記爲對象文字中的不可枚舉。

+1

有沒有辦法建立一個函數,返回所有'x',使得'窗口中的x'是'true'? – Randomblue

+2

@Randomblue我不喜歡在JavaScript中說任何事情都不可能,但我不這麼認爲。這就是那個「enumerable」標誌的意義:防止「內部」屬性污染命名空間。 – Pointy

+2

[找到它](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames#Cross-browser_compatibility)! – Randomblue