現在、JavaScript のオブジェクトと配列の性質について研究しています。JavaScript (オブジェクト指向言語) では、すべてが object から派生することを理解しています{}
。
ここでの質問を理解できるように、調査を段階的に進めます。オブジェクトまたは配列への各割り当ての後、その下のコメントは割り当て後のその変数の状態を示します。
ここでは、Chrome コンソールですべてをテストしました。
// These will be used throughout the example.
var obj = {};
var arr = [];
これで、オブジェクトにキーと値のペアを割り当てることができます。
obj["a"] = "Hello World";
obj["b"] = "Goodbye World";
// {a: "Hello World", b: "Goodbye World"}
この点で、数字をキーとして渡すこともできます(ただし、これが適切な方法かどうかはわかりません)。
obj[1] = "Another World";
// {a: "Hello World", b: "Goodbye World", 1: "Another World"}
同様に、オブジェクトから値を取得したい場合は、[] 演算子を使用できます。
obj["a"];
// "Hello World"
obj[1];
// "Another World"
次に、配列オブジェクトを見てみましょう。[] 演算子は引き続き使用できますが、これはかなり奇妙な実装のようです!
arr[0] = "John";
arr[1] = "Pam";
// ["John", "Pam"]
オブジェクトと同様に、[] 演算子を使用して値を取得できます。
arr[0];
//"John"
しかし、これは少し奇妙に思えるところです...私のアレイの現在の状態を考えると、次のこともできます。
arr["0"] = "Mark";
arr["1"] = "Helen";
// ["Mark", "Helen"]
数値を文字列として渡すと、JavaScript がこれを配列インデックスに変換するように見えますが、代わりに数値以外のキーを渡すとどうなりますか?
arr["foo"] = "Samantha";
arr["bar"] = "Matthew";
// ["Mark", "Helen"]
そのため、キーと値のペアを配列に追加しても、配列自体には影響しませんでしたが、そのキーから値を取得できます。
arr["foo"]
// "Samantha"
ここで私の質問は次のとおりです。配列は、キーと値のペアとして、または配列自体の一部として、データを格納する方法を決定する理由と方法を教えてください。
ここでの私の直感は、配列は技術的にはオブジェクトの派生物であるため、キーと値のペアとして値を格納するオブジェクトの機能を継承するだけでなく、インデックス (配列の性質) によって値を格納することもできるということです。
誰かがこれについて何か洞察を持っているなら、私はそれを聞いてうれしいです!