var o = {
toString: function () {
console.log("ok")
}
};
for (var key in o) {
if (key == "toString") {
alert(key);
}
}
高程3中第153页上面有这段代码。他说IE中屏蔽不可枚举属性的实例属性不会出现在for in循环中,就是说上面不会有弹窗,但是我在IE 5 7 8都测试了,都会弹窗,这个bug是被修复了还是怎么样
1.MSDN上这么说:
大意是IE8对于与原型内置属性同名的属性(这里的原型指Object)不进行枚举,IE9则认为这些属性是可枚举的。
toString
是Object
的内置属性,所以不枚举,没有问题;2.StackOverflow上有个类似的问题,提问者在实际使用过程中发现了同样的问题
答案结论类似,不过更详细地指出了实现原理是
DontEnum
属性:MDN上对
DontEnum
的说明,指出其是在ES3初次实现,后来在ES5中改了名字。ES3发布是在1999年,处于IE5的更新时间内。
答案还给了个MDN的连接,可惜不能访问了,google快照也查不到。不过答案中提到了一个词叫"JScript DontEnum Bug",根据这个去搜索可以查到一些结果,以及几个SO的问题,结论类似。
综上我们可以判断,这个bug是的确存在过的,影响范围是IE4(不确定)~IE9之间所有IE浏览器。
至于没有测试成功,原因就不清楚了。我也不会下个IE5去测试。可能被修复了吧:)