Map
をラップするオブジェクト用のカスタムゲッターとセッターメソッドが必要です。 どういうわけか、配列をキーとして使用すると、同じ値を持つときに等しいように、getter
は同じ動作をします。彼らは2つの異なる参照ですが。 (FFとChromeでテスト済み)。同じ値を持つゲッターの2つの配列が「等しい」のはなぜですか?
var Cons = function(){
this.data = new Map();
};
Cons.prototype.initialiseGetterAndSetter = function initialiseGetterAndSetter(prop){
Object.defineProperty(this, prop, {
get: function(){
return this.data.get(prop);
},
set: function(val){
this.data.set(prop, val);
}
});
};
var obj = new Cons();
var arr1 = [1];
var arr2 = [1];
var arr3 = [2];
obj.initialiseGetterAndSetter(arr1);
obj[arr1] = 1;
document.getElementById('box1').innerText = obj[arr1]; // 1 as expected
document.getElementById('box2').innerText = obj[arr2]; // expected undefined but got 1
document.getElementById('box3').innerText = obj[arr3]; // undefined as expected
あなたはゲッターそれ私が期待していた同じ参照に渡す何場合、それは問題ではありません見ることができるように。それは、それが私にとって奇妙な同じ値を持っているかどうかだけをチェックします。なぜそれがそのように振舞うのか私に説明できますか?
ありがとうございます!
EDIT マップに直接アクセスすると、期待される結果が返されます。
をそれはおそらくにキーを変換し、 "1"を使用します。 – melpomene