for
- in
循环将遍历对象的所有可枚举属性,甚至是原型链中的那些属性。函数hasOwnProperty
可以过滤掉原型链中的可枚举属性。最后,函数propertyIsEnumerable
可以区分对象的可枚举属性。
因此,以下脚本不应打印任何内容:
for(a in window)
if(window.hasOwnProperty(a) && !window.propertyIsEnumerable(a))
console.log(a);
但是,在Chrome上,上面会打印很多的属性名称。
为什么for
- in
循环和propertyIsEnumerable
互相矛盾?
答案 0 :(得分:0)
Chrome非常奇怪:
for(a in window)
if(window.hasOwnProperty(a) && window.propertyIsEnumerable(a))
console.log(a);
它提供了大约30个属性,相比之下,与450相反,在chrome中。