【问题标题】:Why does boolean true have toJSON method in IE?为什么布尔真在 IE 中有 toJSON 方法?
【发布时间】:2013-02-07 13:49:07
【问题描述】:

这是一个奇怪的 IE 怪癖。步骤如下:

  1. 在 Internet Explorer 8 中转到 msn.com
  2. 调出开发工具
  3. 将浏览器模式切换为“IE8 兼容视图”
  4. 将文档模式切换为“IE7 标准”
  5. 切换到脚本选项卡
  6. 运行以下脚本:true.toJSON()

它返回true。没有其他浏览器可以做到这一点。它给我带来了问题,因为它导致 jQueryUI 的工具提示小部件在 IE 中失败,因为在某些时候它将布尔值 true 传递给 $.isEmptyObject()。通常传入true 只会返回true,但由于true 现在有一个与之关联的方法(toJSON),它会返回false 并破坏小部件。

我注意到有些网站(例如 Google)可以尝试进行相同的测试,而 true.toJSON() 只是中断而不返回任何内容。这是什么奇怪的toJSON 方法,我该如何摆脱它?

【问题讨论】:

  • 你真的需要支持IE7吗?也许你可以试试delete true.toJSONtrue 是一个布尔对象
  • 大概应该是delete Boolean.prototype.toJSON - 但这似乎是一个非常糟糕的主意。
  • 这似乎是特定于msn.com。尝试其他网站,您会发现大多数网站都没有。这意味着 MSN 通过扩展 Boolean.prototype 自己定义了方法。
  • 它肯定会出现在其他网站上,比如 USA.gov 和我正在开发的网站。我不知道为什么。
  • 如果它只出现在特定设置下的一个浏览器中,尝试删除它可能是个好主意

标签: javascript internet-explorer internet-explorer-8 cross-browser jquery-ui-widget


【解决方案1】:

toJSON 是一种方法,如果在对象上定义,则指定JSON.stringify 对其工作的方式。查看MDN了解更多详情。

【讨论】:

    【解决方案2】:

    来自the jQuery.isEmptyObject() documentation

    与其他类型一样,参数应该始终是纯 JavaScript 对象 对象(DOM 元素、原始字符串/数字、宿主对象)可能 不同浏览器的结果不一致。

    换句话说,修复工具提示小部件。

    【讨论】:

    • 你是对的。我记录了工具提示小部件的缺陷。 bugs.jqueryui.com/ticket/9110
    • 我发现JS错误的原因是只使用了jquery-ui代码的一个子集。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-09
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 2021-10-31
    相关资源
    最近更新 更多