I've been trying to debug some js in Internet Explorer, and I can't figure this one out. Here's the line that is causing the error:
var numberOfColumns = Object.keys(value).length;
And the error is...
Message: Object doesn't support this property or method
Line: 640
Char: 5
Code: 0
URI: xxx
At first I thought it had something to do with the Object.keys(value).length;
property, but strangely (for me anyways), the error is at char 5, which is the beginning of the variable name.
Anyways, I have no idea what's going on or how to fix it. Also, if I replace:
var numberOfColumns = Object.keys(value).length;
With ...
var numberOfColumns = 9; // troubleshooting
The error persists. Please help.
Update
jsFiddle added
http://jsfiddle.net/4Rab7/
The keys
property is supported in IE >= 9. You are probably testing it in an earlier version. A simple workaround is:
var length = 0;
for(var prop in data){
if(data.hasOwnProperty(prop))
length++;
}
Here is a demonstration: http://jsfiddle.net/vKr8a/
See this compatibility table for more info:
http://kangax.github.com/es5-compat-table/
Alternatively, you could use a recommended polyfill for browsers that don't natively support 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}
A break down of what this script does:
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
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With