2012-03-13 20 views
0

はサンプルコードです:JS奇妙な配列の挙動

console.log('params is empty: '+(params == '')); 
console.log('params: '+params); 
console.log('df: '+params['df']); 
$.each(params, function(p_name, p_val){ 
    console.log(p_name+': '+p_val); 
}); 

そしてresponce:これがいかに

params is empty: true 
params: 
df: 15.03.2012 

+0

'params' perchanceは' '' 'に評価される' toString'メソッドを持っていますか? – rjz

+0

@rjz - 質問には「配列」と書かれていて、「df」以外のプロパティを持っているという示唆はありません。 – Quentin

答えて

3

paramsがあるので、おそらく(あなたは私たちは、あなたがそれを実行しているテストから結論を描画することによって除き、実際それでであるかを知ることはできませんので、あらかじめ定義された変数を使用して表示されているとして、それがそのようにする必要があり) 配列であり、オブジェクトではありませんです。

配列は、数値キーで順序付けられた値のシーケンスを保持するように設計されています。

オブジェクトには、(比較的)任意のキーの値があります。

配列を文字列にすることは、数字キーを結合するだけです。空の文字列と比較すると、数値キーがある場合にのみ偽の値が返されます。

$.eachは、配列上で反復処理しており、テンキーのみをヒットしていることに注意しています。

dfは数字キーではありません。

1

奇妙なことはありません。 Paramsは(組み込み型Arrayの)単なるオブジェクトです。

console.log('params is empty: '+(params == '')); //result of Array.toString on empty array = "" 

console.log('params: '+params); //result of Array.toString on empty array = "" 

console.log('df: '+params['df']); //if params is an object and you do params.df='15.03.2012' then params['df']='15.03.2012'. 

$.each(params, function(p_name, p_val){ 
    console.log(p_name+': '+p_val); 
});