我遇到了一个非常奇怪的问题,IE8的JS引擎(也可能是以前的版本,但IE8模式下不是IE9,因为JS引擎不会回退)。简化示例:
var foo = { toString : 42, x : 22 };
for(var n in foo){
console.log(n)
}
// result: "x"
换句话说,toString
属性永远不会被枚举。也不会valueOf
,hasOwnProperty
等......或var x = 5; x.toFixed = 42;
因此,即使您更换了本地存在的任何属性,我也无法进行枚举...
我的问题 - 有没有人知道实际访问这些的任何方法?!?我需要因为我正在走一个对象的原型而且toString
函数没有被拾取。
答案 0 :(得分:2)
因此,您在IE中遇到的行为就是所谓的“JScript DontEnum Bug”,它存在于IE8及以下版本中。
在IE< 9,JScript将跳过对象原型链中具有DontEnum属性的同名属性的任何对象中的任何属性。
来源:https://developer.mozilla.org/en/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug