2012-12-05 9 views
10

Próbowałem usunąć niektóre błędy js w Internet Explorerze i nie mogę wymyślić tego. Oto wiersz, który jest przyczyną błędu:Problem z IE - Object.keys (wartość) .length nieobsługiwany

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

a błąd jest ...

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

Na początku myślałem, że to ma coś wspólnego z nieruchomości Object.keys(value).length;, ale dziwnie (dla mnie tak czy inaczej), błąd znajduje się na char 5, który jest początkiem nazwy zmiennej.

W każdym razie, nie mam pojęcia, co się dzieje i jak to naprawić. Również, jeśli mogę wymienić:

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

Z ...

var numberOfColumns = 9; // troubleshooting 

błąd będzie się powtarzał. Proszę pomóż.

Aktualizacja

jsFiddle dodany

http://jsfiddle.net/4Rab7/

+0

próbowałeś uruchomić go z firebug lub jakimkolwiek innym narzędziem do debugowania? – AMember

+0

możesz pokazać więcej kodu, może jsfiddle z problemem – AMember

+0

Jeśli wymienisz rzekomo wadliwy kod na niezawodny kod i nadal się nie uda, szansą na to jest coś innego. –

Odpowiedz

19

Właściwość keys jest obsługiwana w IE> = 9. Prawdopodobnie testujesz ją we wcześniejszej wersji. Prosty obejście jest:

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

Oto demonstracji: http://jsfiddle.net/vKr8a/

Zobacz tę tabelę kompatybilności o więcej informacji:

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

+0

Awesome, właśnie wymyśliłem rozwiązanie, ale twoje jest znacznie prostsze (i lepsze) niż moje: http://jsfiddle.net/xDfBZ/. Zdecydowanie pójdę z twoim – veryConfused

+0

http://jsfiddle.net/t8EfF/1/ – noob

+0

to zanieczyszczenie 'prop' global var –

4

Object.keys został wprowadzony w ECMAScript 5th Edition. Więc jeśli wersja IE jest mniejsza niż 9, nie będzie obsługiwana.

12

Alternatywnie, można użyć zalecanego PolyFill dla przeglądarek nie należy natywnie obsługiwać 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} 
+0

Czyste, proste i skuteczne. – Piyush