被替换的内置属性的IE8属性枚举(例如`toString`)

时间:2011-09-09 21:16:24

标签: javascript internet-explorer internet-explorer-8 properties

我遇到了一个非常奇怪的问题,IE8的JS引擎(也可能是以前的版本,但IE8模式下不是IE9,因为JS引擎不会回退)。简化示例:

var foo = { toString : 42, x : 22 };
for(var n in foo){ 
    console.log(n)
}

// result: "x"

换句话说,toString属性永远不会被枚举。也不会valueOfhasOwnProperty等......或var x = 5; x.toFixed = 42;

因此,即使您更换了本地存在的任何属性,我也无法进行枚举...

我的问题 - 有没有人知道实际访问这些的任何方法?!?我需要因为我正在走一个对象的原型而且toString函数没有被拾取。

1 个答案:

答案 0 :(得分:2)

因此,您在IE中遇到的行为就是所谓的“JScript DontEnum Bug”,它存在于IE8及以下版本中。

  

在IE< 9,JScript将跳过对象原型链中具有DontEnum属性的同名属性的任何对象中的任何属性。

来源:https://developer.mozilla.org/en/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug