2012-06-08 27 views
1

其他瀏覽器正常工作,但在IE中,我使用下面的代碼獲得Number Expected,並且它在sort函數中運行爲空對象。 http://jsfiddle.net/R3ndd/2/排序預期錯誤

有什麼建議?謝謝!

我的解決方案

我決定使用從JSON取出空對象(工作)以下:

var y; 
for (var x in jItems) { 
    if (Object.prototype.hasOwnProperty.call(jItems,x)) { 
     y = jItems[x]; 
     if (y==="null" || y===null || y==="" || typeof y === "undefined") { 
      delete jItems[x]; 
     } 

    } 
} 
+0

你確定所有的條目都有明確定義的名稱屬性嗎? –

+0

你可以發佈iLen和jItems變量嗎?最好是其他代碼與您的問題有關。 – j08691

+0

增加了額外的代碼 –

回答

2

不知道爲什麼IE這樣做,但它是它的習慣麻煩我們好人:)。那麼,我認爲這將是更好的方式。

/* NOT NEEDED. 
for (var i = 0; i < iLen; i++) { 
    if(jItems[i] != null){ 
    jItems[i].nameLower = jItems[i].name.toLowerCase(); 
    } 
}*/ 

jItems.sort(function (a, b) { 
    return a && b ? a.toLowerCase().localeCompare(b.toLowerCase()) : 0; 
}); 

UPDATE:

嗯,我想我知道IE是令人不安的。對不起MS,這次IE沒有任何錯誤。發生了什麼事是,如果abnull/''/false(或任何虛假值值),您的回調沒有返回任何值。這爆炸了'數字預期'的錯誤。但是我照顧到了這一點,所以我的答案可能會奏效。 :)

+0

好的,我試圖讓'localeCompare'拋出錯誤,但是不能。 – Esailija

+0

@Esailija,謝謝! :) –

+0

@Parth嘗試了你的代碼,並得到對象不支持此返回上的屬性或方法。更具體地說:a.toLowerCase不是一個功能 –