我一直在尝试在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添加
答案 0 :(得分:21)
IE> = 9支持keys
属性。您可能在早期版本中测试它。一个简单的解决方法是:
var length = 0;
for(var prop in data){
if(data.hasOwnProperty(prop))
length++;
}
以下是演示:http://jsfiddle.net/vKr8a/
有关详细信息,请参阅此兼容性表:
答案 1 :(得分:13)
或者,您可以将推荐的polyfill用于不能原生支持的浏览器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
}
答案 2 :(得分:4)
Object.keys
已在ECMAScript第5版中引入。因此,如果您的IE版本低于9,则不支持它。