为什么'for循环中没有'undefined`出现?

Ran*_*lue 4 javascript properties

关于for- in循环我有点困惑:

window.hasOwnProperty(undefined) // Returns true
Run Code Online (Sandbox Code Playgroud)

undefined in window // Returns true
Run Code Online (Sandbox Code Playgroud)

但下列情况不能打印Undefined is in window!

for(a in window) {
     if(a === 'undefined')
         console.log('Undefined is in window!');
}
Run Code Online (Sandbox Code Playgroud)

为什么没有undefined出现在for- in循环?

Poi*_*nty 7

这不是一个可枚举的财产.在现代JavaScript引擎中,您可以在自己的对象中控制它,但几乎总是如此(可能不是在每个解释器中)"本机"对象可以"隐藏" for ... in迭代中的属性.

您可以Object.defineProperty()MDN上阅读.我不确定是否会有一种语法(在Harmony中)将属性标记为对象文字中的不可枚举.

  • @Randomblue我不喜欢在JavaScript中说任何不可能的东西,但我不这么认为; 这就是"可枚举"标志的重点:防止"内部"属性污染命名空间. (2认同)
  • [找到它](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames#Cross-browser_compatibility)! (2认同)