2017-09-20 9 views
-1

JavaScript配列と、これらの配列でのインデックスの動作について混乱します。配列内のキー値要素の数にかかわらず、配列の長さは常に0です。また、キーが文字列であれば、配列には2つの要素しかないことがわかります。シナリオ1を考えてみましょう。私は次のコードを持っています。Javascript配列の不一致動作の表示

arr = []; 
 
arr['home'] = 1234; 
 
arr['cat'] = 12345; 
 
console.log(arr.length); 
 
console.log(arr);

次に第2のシナリオを検討し、私は、空の配列を有し、私は、配列の20インデックスにいくつかの番号を割り当てます。配列を出力すると、長さは21になり、他のすべての場所は '未定義'になります。第3のシナリオで今

arr = []; 
 
arr[20] = 20; 
 
console.log(arr.length); // Length shows 20 Size of array increased to 21

iがインデックス番号と列インデックスの両方を割り当てし、それは別の奇妙な挙動を示します。配列の長さは、文字列ベースのインデックスの値を数えません。私は4つの数値インデックスと1つの文字列ベースのインデックスを持っています。だから、長さは6でなければなりませんが、長さが5

arr = []; 
 
arr[4] = 4; 
 
arr['home'] = 'home'; 
 
console.log(arr);

を示して今私は、length関数は、文字列のインデックス付き項目を考慮していないのはなぜ2 questions.Firstlyを、持っていますか?次に、番号付きインデックスの場合、配列のサイズが少なくともその数に増やされるのはなぜですか?

+0

配列には数字キーしかありません –

+0

コードを実行しようとしましたか?これは私が質問したjavascriptです - @RolandStarke –

答えて

4

JavaScript配列はオブジェクトであり、いくつかの追加動作があることを理解しておく必要があります。オブジェクトと同じように、プロパティを割り当てることができます。

プロパティの名前が数値文字列で、上位の数値キーがない場合は、lengthプロパティが更新されます。数字以外のキーは、lengthプロパティには影響しません。

Array.prototypefilterslice、...)のメソッドは、配列の数値キーでのみ機能します。

+2

数値プロパティだけではありません。 0〜2の間の「整数」プロパティのみ^ 32-1。 –

-1

JavascriptにはPHPのような連想配列はありません。値に関連付けられた数値インデックスを持つ配列を持ち、key => valueにマップされたオブジェクトを持っています。上記の例で

Javascript ArraysJavascript Objects

const arr = [1, 2, 3, 4, 5, 6, 7]; 

console.log(arr.length); // outputs 7 

const obj = {} 

console.log(obj.length); // undefined 

// set the key => value for obj from arr 

arr.forEach(a => obj[a] = a); 

console.log(obj[0]); // undefined 
console.log(obj[1]); // 1 

console.log(arr[0]); // 1 
console.log(arr[1]); // 2 

JS Bin

は、そのARRが配列され、objがオブジェクトとその値であるが、その値は、インデックス=>値をマッピングされ見ることができますキー=>値にマッピングされます。オブジェクトはハッシュマップ/連想配列として機能できますが、配列はできません。あなたがオブジェクト/ハッシュマップ内の値の数を取得したいとしたら、あなたはいつでも行うことができます

...

Object.keys(OBJ).LENGTH

これはObject.keys(...)返すためですオブジェクトのキーを配列として返します。

正確な答えとして、配列はオブジェクトであることを明確にする必要がありますが、オブジェクトは本質的にオブジェクトとは機能が異なります。ドキュメントごとに、配列は「高レベルのリストのようなオブジェクト」

+0

私はそれが連想配列を持っていないことに同意します。しかし、私が宣言した配列と同じように、文字列インデックス付きの項目だけでなく数字もありますか? @kyle –

+0

@BILALAHMAD:あなたは他の答えをお読みですか?配列はオブジェクトです。オブジェクトは任意のプロパティを持つことができます。 –

関連する問題