配列 (リスト、ベクトル、タプルなど) を提供するプログラミング言語は、それらが参照セマンティクスを持つか値セマンティクスを持つかを決定する必要があります。通常の/明白な選択は、可変配列の参照セマンティクスと不変配列の値セマンティクスです。
変更可能な配列を提供する JavaScript は、参照セマンティクスを選択したように見えます。
var a = [1, 2, 3]
var b = [1, 2, 3]
then a != b
、予想どおり、内容は同じですが、配列が異なるためです。
ただし、それらをオブジェクトのキーとして使用すると、画像が変わります。obj[a]
値を設定するobj[b]
と、同じ値が取得されます。さらに、これは配列の内容を変更しても当てはまります。少なくともRhinoでテストしたとき、配列の1つが作成された場合に発生する無限ループのチェックを完了して、ルックアップごとにインタープリターが提供および保存されたキー配列の完全な内容を再帰的に比較しているかのように動作します自分自身を指します。
これはすべての実装で意図された/指定された動作ですか?
キーとして使用されるオブジェクトにも適用されますか?
参照セマンティクスで配列をキーとして使用して値を検索するなど、他の動作を取得する方法はありますか?