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

发布于 2024-12-04 03:30:44 字数 470 浏览 1 评论 0原文

我在 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 函数没有被获取。

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

南薇 2024-12-11 03:30:44

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

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

来源: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.

In IE < 9, JScript will skip over any property in any object where there is a same-named property in the object's prototype chain that has the DontEnum attribute.

Source: https://developer.mozilla.org/en/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文