4

接続しているAPIは、オブジェクトを返します。そのキー/プロパティの1つは「長さ」と呼ばれ、これにより奇妙な動作が発生します。

var obj = {"text1":{"index":0,"lengt":5}}; //modified key for testing

$.each(obj.text1,function(k,v){     
    console.log ('i: '+k+' v: '+v); });

i: index v: 0  //this is the result I'm looking for
i: lengt v: 5

var obj = {"text1":{"index":0,"length":5}}; //original object 

i: 0 v: undefined // ????
i: 1 v: undefined 
i: 2 v: undefined 
i: 3 v: undefined 
i: 4 v: undefined 

length予約語だと思いますが、それが元のオブジェクトの出方です。この問題を見つけて回避するための最良の方法は何でしょうか?

助けてくれてありがとう。

4

2 に答える 2

4

これはjqueryの「機能」です;-)。lengthソースによると、プロパティが定義されていない場合、変数はオブジェクトとして扱われます。

https://github.com/jquery/jquery/blob/master/src/core.js#L589

var name,
    i = 0,
    length = obj.length,
    isObj = length === undefined || jQuery.isFunction( obj );
      ^---------

もしそうならisObj-https ://github.com/jquery/jquery/blob/master/src/core.js#L608falseを参照してください

if ( isObj ) {
    // not your case, ommitted
} else {
    for ( ; i < length; ) {
        if ( callback.call( obj[ i ], i, obj[ i++ ] ) === false ) {
            break;
        }
    }
}

あなたが見ることができるようにそれはiから0に繰り返されますlength

于 2012-11-27T02:17:48.837 に答える
1

昔ながらの「for-in」構造を使用してみませんか?jQueryが必要ない場合もあります...これはより単純で、より最適化されています。関数呼び出しや「if isObjthing」によるテストはなく、おそらく2行または3行のコードです...

var value;
for (var key in object)
{
  value = object[key];
  console.log(key, '=', value); //and voila !
}
于 2012-11-27T04:02:51.307 に答える