如何在IE 9中为Object.keys调用失败编写补丁?

时间:2016-11-18 13:39:22

标签: javascript jquery internet-explorer

背景资料

我遇到的问题与此处描述的相同: 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>&nbsp;</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>&nbsp;</td>";
         }

以下是新功能“keyslengthforIE”的样子:

function keyslengthforIE(obj) {
    var keys = [];  
    for (var i in obj) {
      if (obj.hasOwnProperty(i)) {
        keys.push(i);
      }
    }
    return keys;
}

问题

我的代码存在两个问题,我不知道如何修复。

  1. 当IE看到对Object.keys的调用时仍然会抱怨。 我得到错误“Object.keys:参数不是一个对象”,它指向第319行。第319行是这样的:

    len = Object.keys(res [key] ['associated_users'])。length;

  2. 从新功能返回的len实际上是错误的。我知道它应该是10但我得到1.

  3. 任何建议都将不胜感激。

    编辑1

    现在我知道它在IE 9中得到支持,我看到了我的错误。 将发表回答

1 个答案:

答案 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>&nbsp;</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>&nbsp;</td>";
         }
    } //end for loop