2011-03-17 12 views
4

2番目のアラートに0と表示される理由を説明できる人はいますか?JavaScript配列の長さメソッド

var pollData = new Array(); 
    pollData['pollType'] = 2; 
    alert(pollData['pollType']); // This prints 2 
    alert(pollData.length); // This prints 0 ?? 
+0

そのくそクレイ。配列にしないでください私の脳を傷つける –

答えて

8

数値のインデックスを追加する場合にのみ配列の長さが変更されます。例えば、

pollData["randomString"] = 23; 

は、長さには影響しませんが、

var pollData = []; 
pollData["45"] = "Hello"; 
pollData.length; // 46 

はキーが限り、数値または文字列だった場合、それは問題ではありませんので46注意に長さを変更しますそれは数値整数です。

さらに、この方法で配列を使用することは想定されていません。配列はオブジェクトでもあり、JavaScriptでは任意のオブジェクトが任意のキーを文字列として保持できるため、副作用が多いと考えてください。

+0

鍵を 'pollType'という文字列にすることはできますか? – edwinNosh

+0

はい、できます。あなたの質問の例はまさにそれを行います。しかし、それは良い習慣ではありません。配列に関連する追加データをどこかに保存しますか? – Anurag

+0

長さがまだ0であるので、それは配列にそれらを追加しません – edwinNosh

2

まだ配列に何も入れていないからです。配列のオブジェクトの動的に作成されたpollType属性にのみ割り当てられました。

数値インデックスを使用すると、配列は自動的に長さを扱います。例えば:

0
var arr = [ ]; // same as new Array() 
arr[2] = 'Banana!'; 
alert(arr.length); // prints 3 (indexes 0 through 2 were created) 

length性を考慮名前は、インデックスされ、アレイのメンバーのみかかり(等'1''2''3'、...)。

0

JavaScriptの配列には数値インデックスのみがあります。

本質的にあなたが上でやっていることであるオブジェクトを使用して、その配列オブジェクトのプロパティを設定します。

0

array.lengthは、配列に格納されている値の数を返します。最初のアラートは、 'pollType'の位置の値を返しています。

JavaScriptの配列で助けを必要とするとき、私は常に使用リファレンスガイドでは、このページでhttp://www.hunlock.com/blogs/Mastering_Javascript_Arrays

私はまた、あなたがこの問題に実行することとして、連想配列をサポートしていません見出しのJavascriptの下で、それが言うこと読んだ

また、

+0

Array.lengthがそうしている間に、それはそのように動作しません。ここ:http://jsfiddle.net/6WrkT/1/ –

0

var pollData = Array();

function test() { 
    pollData[0] = 2 
    alert(pollData[0]); 
    alert(pollData.length); 
} 

// [x]は配列位置です。それゆえ['polltype']は問題を引き起こしています

関連する問題