12

我一直在尝试在 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;属性有关,但奇怪的是(无论如何对我来说),错误出现在 char 5 处,它是变量名的开头。

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

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

和 ...

var numberOfColumns = 9; // troubleshooting

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

更新

添加了 jsFiddle

http://jsfiddle.net/4Rab7/

4

3 回答 3

22

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/

于 2012-12-05T13:47:28.467 回答
13

或者,您可以为本身不支持的浏览器使用推荐的 polyfillObject.keys

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
}
于 2014-04-29T07:06:43.283 回答
4

Object.keys已在 ECMAScript 第 5 版中引入。因此,如果您的 IE 版本低于 9,它将不受支持。

于 2012-12-05T13:46:07.097 回答