<body>
<h1 id="a">Site 3</h1>
<script>
var arr = []
for(var i in window)
{
arr.push(i)
}
console.log("a" in window)// true
console.log(arr)// dont have property a why?!
</script>
</body>
但是当我运行console.log(arr)时,我没有数组,为什么?
答案 0 :(得分:2)
things accessible on window
不一定是window
的“拥有”属性,并且(这是重要位)不是必需的可枚举。 for-in
仅访问可枚举的属性(“拥有”和继承)。
例如,在Chrome上,自动a
全局是window
原型原型的属性,并且标记为不可枚举:
var o = window;
var where = "window"
while (o && !Object.getOwnPropertyDescriptor(o, "a")) {
where = "prototype of " + where;
o = Object.getPrototypeOf(o);
}
console.log(where);
console.log(Object.getOwnPropertyDescriptor(o, "a"));
<div id="a"></div>
看起来它在Firefox上的位置相同。
只要in
有效并且window.a
有效,就无法确定如何实现命名访问的确切语义。