2

這是一個奇怪的IE怪癖。以下是具體步驟:爲什麼boolean true在IE中必須使用JSON方法?

  1. 轉到msn.com在Internet Explorer 8
  2. 拉起開發工具
  3. 切換瀏覽模式爲 「IE8 compat的視圖」
  4. 切換文檔模式爲 「IE7標準」
  5. 切換到腳本選項卡
  6. 運行以下腳本:true.toJSON()

它返回true。沒有其他瀏覽器會這樣做。它給我的問題,因爲它導致jQueryUI的工具提示小部件失敗的IE瀏覽器,因爲在某些時候它傳遞一個布爾值true$.isEmptyObject()。正常情況下,傳入true只會返回true,但由於true現在有一個與之關聯的方法(toJSON),它將返回false並中斷小部件。

我注意到有一些網站(如谷歌),你可以嘗試做相同的測試和true.toJSON()只是休息而不返回任何東西。這是什麼奇怪toJSON方法,我該如何擺脫它?

+0

你真的需要支持IE7嗎?也許你可以嘗試'刪除true.toJSON'。 'true'是一個布爾對象 – 2013-02-22 02:21:30

+2

想必這應該是'delete Boolean.prototype.toJSON' - 但這似乎是一個非常糟糕的主意。 – Hamish 2013-02-22 02:34:09

+3

這似乎是特定於[msn.com](http://www.msn.com/)。嘗試另一個網站,你會發現大多數沒有它。這意味着MSN通過擴展['Boolean.prototype']來定義方法本身(https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Boolean/prototype)。 – 2013-02-22 02:35:41

回答

2

the jQuery.isEmptyObject() documentation

的參數應該始終是一個普通的JavaScript對象其他類型的對象的 (DOM元素,原始字符串/數字,主機對象)可以 不給跨瀏覽器一致的結果。

換句話說,修復工具提示小部件。

+1

你是對的。我記錄了工具提示小部件的缺陷。 http://bugs.jqueryui.com/ticket/9110 – lyoung 2013-02-22 03:34:29

+0

我發現JS錯誤的原因是由於只使用了jquery-ui代碼的一個子集。 – lyoung 2014-03-13 20:36:39

0

toJSON是一種方法,如果在某個對象上定義了該方法,則該方法指定JSON.stringify對其的處理方式。查看MDN瞭解更多詳情。

相關問題