私は思いますあなたはオブジェクトを配列と混同しています。配列は実際にjavascriptのオブジェクトですが、それは私たちを助けません。
インスタンス化しようとしているのは、キーと値のペア“material”->“cardboard”, “size”->“small”
を持つ連想配列です。しかし、このようなデータ構造はjavascriptには存在しません。アレイは、唯一のインデックスとして整数を持っている必要があり、
box = [];
box[0] = 'material';
box[1] = 'someValue';
のように、なぜあなたのコード(だけは連想配列であることをだ)
box = [];
box['0'] = true;
box['1'] = 'cardboard';
作品理由は、暗黙の型変換です。 box
は配列であると宣言しているため、文字列はこの位置では無効です.JavaScriptはそれを静かに整数に変換しますので、上記のように単純な退屈な整数インデックス配列を再度取得します。
あなたができることは、属性を持つobject
を作成することです。だからかもしれない、例えば、状態
box = {}; // box is now an object
box.size = 'small'; // box now has an attribute called “size”
// which has the (string) value “'small'”
box.material = 'cardboard';
またはオブジェクトリテラルの表記を使用して一度に:
box = {
size: 'small',
material: 'cardboard'
};
これはJavaScriptで連想配列に取得することができます最も近いです。オブジェクトには長さがないことに注意してください。の属性番号にアクセスする場合は、Object.keys(box).length
を使用する必要があります。 、キーを反復
for(var key in box){
console.log('value of ' + key + ' is ' + box[key])
}
注意にここで、配列のような表記を使用しますが、覚えておく:あなたは、オブジェクトではなく、配列を扱っている、それらに対処することは似ていますけれども。 boxはobject型であるため、自分で定義した属性だけでなく、すべてのオブジェクトに対して定義されている属性も取得します。あなたは、キーを追加する必要がある場合は、そこに自分を入れるだけでキーを取得するには、
for (var key in box) {
if (box.hasOwnProperty(key)) {
// do stuff
}
}
を使用し、すなわち、実行時に属性を、私は正確な答えを持っていない
//supposing that box was instantiated as above
var listOfBoxAttributes = ['shape', 'color', 'weight'];
for(var i in listOfBoxAttributes)
box[listOfBoxAttributes[i]] = undefined;
(たとえば)を使用この質問はおそらく重複していますが、代入を 'box ['material'] = 'cardboard''とすると、実際には何もインデックスに格納していません。 –