背景资料
我遇到的问题与此处描述的相同: Object.keys not working in internet Explorer 本质上,我试图调用Object.keys,但它在IE中失败了。
我已尝试将上述帖子中提出的解决方案改编为我的代码,但它无效。
以下是原始代码的样子 - 我只显示围绕Object.keys调用的代码:(在chrome中工作)
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方法的行上失败。
我尝试在ajax成功处理程序中的循环之前添加以下逻辑,以检查浏览器是否支持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;
}
问题
我的代码存在两个问题,我不知道如何修复。
当IE看到对Object.keys的调用时仍然会抱怨。 我得到错误“Object.keys:参数不是一个对象”,它指向第319行。第319行是这样的:
len = Object.keys(res [key] ['associated_users'])。length;
从新功能返回的len实际上是错误的。我知道它应该是10但我得到1.
任何建议都将不胜感激。
编辑1
现在我知道它在IE 9中得到支持,我看到了我的错误。 将发表回答
答案 0 :(得分:0)
我不得不更改原始代码:
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
看起来像这样:
for (var key in res) {
if ( ( res[key]['associated_users']) && (Object.keys(res[key]['associated_users']).length > 0 )) {
//do something here to build htmlstring with data
} else {
htmlstring += "<td> </td>";
}
} //end for loop