我在這是這裏所描述的相同的問題背景資料: Object.keys not working in internet Explorer 本質上講,我試圖調用Object.keys但它的失敗在IE中。
我試着將上面的帖子中提出的解決方案調整到我的代碼中,但它不工作。
這裏是原來的代碼是什麼樣子 - 我只顯示包圍調用Object.keys代碼:(鉻作品)
for (var key in res) {
if (Object.keys(res[key]['associated_users']).length > 0) {
//do something here to build htmlstring with data
} else {
htmlstring += "<td> </td>";
}
} //end for loop
在IE 9中,系統上線失敗它調用Object.keys方法。
我嘗試了阿賈克斯成功處理程序內循環之前,添加以下邏輯來檢查瀏覽器是否支持Object.keys:
var len = 0;
if (!Object.keys) {
var temp = keyslengthforIE(res);
len = temp.length;
} else {
len = Object.keys(res[key]['associated_users']).length;
}
if (len > 0) {
//do something here to build htmlstring with data
} else {
htmlstring += "<td> </td>";
}
這裏還有什麼新的功能「keyslengthforIE」的模樣:
function keyslengthforIE(obj) {
var keys = [];
for (var i in obj) {
if (obj.hasOwnProperty(i)) {
keys.push(i);
}
}
return keys;
}
問題
有兩個問題,我的代碼,我不知道怎麼到f九。
當IE看到對Object.keys的調用時,IE仍然抱怨。 我收到錯誤「Object.keys:參數不是對象」,它指向行319.行319是這樣的:
len = Object.keys(res [key] ['associated_users']).length ;
從新函數返回的len實際上是錯誤的。我知道它應該是10,但我越來越1.
任何意見,將不勝感激。
編輯1
現在我知道它在IE 9支持,我看到我的錯誤。 將發佈答案
'Object.keys'在IE9提供,你的問題是,'RES [key] ['associated_users']'不是對象 – adeneo
@adeneo doh!好。我明白你的意思了。請參閱編輯1 – Happydevdays
如果您想在舊版瀏覽器中修補缺少的方法,只需使用[標準polyfill](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys#Polyfill)創建'Object.keys'函數,而不是寫一個特定的'keyslengthforIE'並測試在每次調用前使用哪一個函數。 – Bergi