Javascript 为什么布尔真在IE中有JSON方法?

Javascript 为什么布尔真在IE中有JSON方法?,javascript,internet-explorer,internet-explorer-8,cross-browser,jquery-ui-widget,Javascript,Internet Explorer,Internet Explorer 8,Cross Browser,Jquery Ui Widget,这是个奇怪的怪癖。以下是步骤: 在Internet Explorer 8中转到 打开开发工具 将浏览器模式切换到“IE8兼容视图” 将文档模式切换到“IE7标准” 切换到脚本选项卡 运行以下脚本:true.toJSON() 它返回true。没有其他浏览器能做到这一点。它给我带来了问题,因为它导致jQueryUI的工具提示小部件在IE中失败,因为在某个点上它将布尔值true传递给$。isEmptyObject()。通常传入true只会返回true,但由于true现在有一个与之关联的方法(toJSO

这是个奇怪的怪癖。以下是步骤:

  • 在Internet Explorer 8中转到
  • 打开开发工具
  • 将浏览器模式切换到“IE8兼容视图”
  • 将文档模式切换到“IE7标准”
  • 切换到脚本选项卡
  • 运行以下脚本:
    true.toJSON()
  • 它返回
    true
    。没有其他浏览器能做到这一点。它给我带来了问题,因为它导致jQueryUI的工具提示小部件在IE中失败,因为在某个点上它将布尔值
    true
    传递给
    $。isEmptyObject()
    。通常传入
    true
    只会返回
    true
    ,但由于
    true
    现在有一个与之关联的方法(
    toJSON
    ),它返回
    false
    并破坏小部件


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

    toJSON
    是一种方法,如果在对象上定义,它可以指定
    JSON.stringify
    在对象上的工作方式。查看更多详细信息。

    来自:

    与其他类型一样,参数应始终是普通JavaScript对象 对象(DOM元素、基本字符串/数字、主机对象)的 无法跨浏览器提供一致的结果


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

    你真的需要支持IE7吗?也许您可以尝试
    删除true.toJSON
    true
    是一个布尔对象。这应该是
    delete boolean.prototype.toJSON
    ——但这似乎是一个非常糟糕的主意。这似乎是特定于。尝试其他网站,你会发现大多数人都没有。这意味着MSN通过扩展定义了这个方法。它肯定会出现在其他网站上,比如USA.gov和我正在工作的网站上。我不知道为什么。如果在某些设置下它只出现在一个浏览器中,尝试删除它可能是一个好主意您是对的。我记录了工具提示小部件的一个缺陷。我发现JS错误的原因是因为只使用了jQueryUI代码的一个子集。