【问题标题】:IE issue - Object.keys(value).length not supportedIE 问题 - 不支持 Object.keys(value).length
【发布时间】:2012-12-05 12:58:51
【问题描述】:

我一直在尝试在 Internet Explorer 中调试一些 js,但我无法弄清楚这一点。这是导致错误的行:

var numberOfColumns = Object.keys(value).length;

而错误是……

Message: Object doesn't support this property or method
Line: 640
Char: 5
Code: 0
URI: xxx

起初我以为它与Object.keys(value).length; 属性有关,但奇怪的是(无论如何对我来说),错误出现在字符 5 处,它是变量名的开头。

无论如何,我不知道发生了什么或如何解决它。另外,如果我更换:

var numberOfColumns = Object.keys(value).length;

随着...

var numberOfColumns = 9; // troubleshooting

错误仍然存​​在。请帮忙。

更新

jsFiddle 添加

http://jsfiddle.net/4Rab7/

【问题讨论】:

  • 您是否尝试使用 firebug 或任何其他调试工具运行它?
  • 你能显示更多代码吗,也许是一个解决问题的 jsfiddle
  • 如果你用非错误代码替换了所谓的错误代码,但它仍然失败,那么问题很可能是其他问题。
  • 我的公司屏蔽了某些网站,而 FF 插件页面以及我在这篇文章中找到的工具:stackoverflow.com/questions/361635/debugging-javascript-in-ie7 也被屏蔽了。但是,是的,我会在一秒钟内准备好一个 jsfiddle
  • 我用一个简单的 jsFiddle 实现更新了这个问题。在 IE 8 中,没有警报,但在 Firefox 中,它可以工作。

标签: javascript jquery internet-explorer


【解决方案1】:

IE >= 9 支持keys 属性。您可能正在早期版本中对其进行测试。一个简单的解决方法是:

var length = 0;
for(var prop in data){
    if(data.hasOwnProperty(prop))
        length++;
}

这是一个演示:http://jsfiddle.net/vKr8a/

有关更多信息,请参阅此兼容性表:

http://kangax.github.com/es5-compat-table/

【讨论】:

  • 太棒了,我刚刚找到了解决方案,但你的解决方案比我的简单得多(而且更好):jsfiddle.net/xDfBZ。我一定会和你一起去
  • 这会污染prop global var
  • @StevenLu 你可以使用for (var prop in data)
  • 是的,如果你想避免我的反对意见,这就是这个答案应该是什么:P
  • 我们确定 IE >= 9 确实支持键吗?我正在运行 IE11,但它仍然不支持它大声笑,他们决定删除它吗?
【解决方案2】:

或者,您可以为原生不支持Object.keys的浏览器使用推荐的polyfill

Object.keys=Object.keys||function(o,k,r){r=[];for(k in o)r.hasOwnProperty.call(o,k)&&r.push(k);return r}

此脚本的功能分解:

Object.keys = Object.keys || function(o,k,r) { 
// If the script doesn't detect native Object.keys 
// support, it will put a function in its place (polyfill)

    r=[];
    // Initiate the return value, empty array

    for(k in o) r.hasOwnProperty.call(o,k) 
    // loop through all items in the object and verify each
    // key is a property of the object (`for in` will return non 
    // properties)

    && r.push(k);
    // if it is a property, save to return array

    return r
}

【讨论】:

  • 干净、简单、有效。
【解决方案3】:

Object.keys 已在 ECMAScript 第 5 版中引入。所以如果你的IE版本低于9,就不支持了。

【讨论】:

    猜你喜欢
    • 2013-07-28
    • 1970-01-01
    • 2010-10-23
    • 2021-09-17
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    相关资源
    最近更新 更多