替换内置属性的 IE8 属性枚举(例如 `toString`)
我在 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
函数没有被获取。
I've run into a very odd issue with IE8's JS engine (possibly previous versions as well, but NOT IE9 in IE8 mode since the JS engine doesn't fallback). Simplified example:
var foo = { toString : 42, x : 22 };
for(var n in foo){
console.log(n)
}
// result: "x"
In other words, the toString
property never gets enumerated. Nor would valueOf
, hasOwnProperty
, etc... or var x = 5; x.toFixed = 42;
So any property that natively exists can not be enumerated as far as I can tell, even after you replace it...
My question -- Does anyone know of any way to actually access these?!? I need to because I'm walking the prototype of an object and the toString
function isn't getting picked up.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
因此,您在 IE 中遇到的行为是所谓的“JScript DontEnum Bug”,它存在于 IE8 及更低版本中。
来源:https://developer.mozilla.org/en/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug
So, the behavior you're experiencing in IE is the so-called "JScript DontEnum Bug" which exists in IE8 and below.
Source: https://developer.mozilla.org/en/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug