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;が、奇妙なことに(とにかく)、変数名の先頭であるchar5にエラーがあります。

とにかく、私は何が起こっているのか、それを修正する方法がわかりません。また、私が交換した場合:

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

と ...

var numberOfColumns = 9; // troubleshooting

エラーが続く。助けてください。

アップデート

jsFiddleが追加されました

http://jsfiddle.net/4Rab7/

4

3 に答える 3

22

この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/

于 2012-12-05T13:47:28.467 に答える
13

または、ネイティブでサポートされていないブラウザに推奨されるポリフィルを使用することもできます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
}
于 2014-04-29T07:06:43.283 に答える
4

Object.keysECMAScript5thEditionで導入されました。したがって、IEバージョンが9未満の場合、サポートされません。

于 2012-12-05T13:46:07.097 に答える