IE的问题 - Object.keys(值)。长度不支持(IE issue - Object.ke

2019-07-04 14:41发布

我一直在试图调试在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/

Answer 1:

keys属性在IE支持> = 9,你可能会在更早的版本测试它。 一个简单的解决方法是:

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

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

详情参见该兼容性表:

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



Answer 2:

或者,你可以使用一个建议填充工具对于本身不支持的浏览器Object.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
}


Answer 3:

Object.keys已在ECMAScript的第5版相继推出。 所以,如果你的IE版本低于9时,将不被支持。



文章来源: IE issue - Object.keys(value).length not supported