2016-04-01 6 views
0

非常に簡単なJavaScriptのこれらの行を過ぎて私と一緒に裸をしてください!JavaScriptの配列要素はArrayオブジェクトのプロパティだけですか?

私は次のことを観察した:

var o = {}; // empty JS object 
var a = []; // empty JS array 

o.myproperty = "I am property"; 
a.push("I am array element"); 

alert(o['myproperty']); // alerts "I am property" 
alert(o.myproperty); // alerts "I am property" 
alert(a[0]); // alerts "I am array element" 
alert(a['0']); // alerts "I am array element" 

/* Of course, accessing an array element using dot notation (e.g. a.0) would cause a 
    SyntaxError: Unexpected number (in JavaScript variable names cannot begin with numbers.) 
*/ 

また:

'myproperty' in o // evaluates to true 
0 in a // true 
'0' in a // true 

delete o.myproperty; // true, o is now empty 
delete o['myproperty']; // true, o is now empty 
delete a[0]; // true, a contains now 1 undefined element 
delete a['0']; // true, a contains now 1 undefined element 

配列に要素を追加すると、実際に後で使用されている配列オブジェクト、上の番号プロパティを作成しているかのように思え参照によって要素にアクセスする。しかし、いくつかの事柄は、これらのの配列要素のプロパティでは正常なオブジェクトのプロパティと同じように機能しません(例は上記の削除です)。したがって...

TL ... javascript配列要素は、見えない番号の配列オブジェクトプロパティを介して参照によってアクセスされますか?

EDIT はそう思わ:Why is using "for...in" with array iteration a bad idea?

答えて

2

はかなりArrayObjectの上に追加されます唯一のものは.length財産、および.pushのようないくつかのアレイ固有の方法です。それは実際には、フードの下でArrayはちょうどObjectです。実際に配列として使用できるのは、.lengthというパラメータです。 のプロパティをの方法でfor (i = 0; i < arr.length; i++)ループの順序で繰り返すことができます。 .lengthプロパティは、.push()新しい要素を配列に追加するときや、他の配列固有の操作を行うときに更新されます。これは、オブジェクトをインデックス付きの順序付きリストとして機能させるために必要なものです。

0

それが必要配列のインデックスアクセサ値を作成するには:

  • は負でない整数(01100て、 200);
  • stringから)数に変換した場合、それは負でない整数でなければならない( '0'、 '1.000')例えば

a['100'] // as index a[100] 
a['0'] // as index a[0] 
a[1.00] // as index a[1] 

それ以外の場合は、アクセサーは配列オブジェクトのプロパティとして扱われます。

a[-1]  // as a property a['-1'] 
a['myProp'] // as a property a['myProp'] 

アレイを通常のオブジェクトと異なるものにする理由:インデックスを使用するとlengthプロパティが自動更新されます。 lengthは、常に最高インデックスより1だけ大きくなければなりません。

+0

「インデックスとして扱われる」とはどういう意味ですか?インデックスプロパティと別のプロパティの違いは何ですか?おそらく@decezeが答えたところで – Nonorios

+0

@Nonoriosは "インデックスとして扱われる"とは、値を設定すると最高のインデックスに基づいて 'length'を増やすことを意味します。通常のプロパティを設定するとき、 'length'は自動更新されません。 –

0

配列はオブジェクトです。参照する最も簡単な方法は[] instanceof Objectで、trueを返します。

そして、配列要素はオブジェクトプロパティと同じ方法で参照によってアクセスされます。

オブジェクトのプロパティを削除すると、実際にはこのプロパティがundefinedに設定されているため、オブジェクトまたは配列で同じです。

関連する問題