我正在使用地圖訪問類似於普通對象的JavaScript地圖
因爲我想存儲一個對象作爲關鍵。
我的問題是 - 我可以像訪問普通對象一樣訪問地圖嗎?
例如:
let m = new Map();
let obj = {foo:'bar'};
m[obj] = 'baz';
console.log(m[obj]);
被這個所謂的正確的是工作,還是我需要使用地圖的get/set方法?
我問的原因是因爲如果我需要使用get/set它強制我仔細重構很多代碼。
這裏是代碼,可能需要重構一個實際的例子:
//之前(broker.wsLock是普通對象)
function addWsLockKey(broker, ws, key) {
let v;
if (!(v = broker.wsLock[ws])) {
v = broker.wsLock[ws] = [];
}
if (v.indexOf(key) < 0) {
v.push(key);
}
}
//後(經紀人。 wsLock是一個地圖實例)
function addWsLockKey(broker, ws, key) {
let v;
if (!(v = broker.wsLock.get(ws))) {
v = [];
broker.wsLock.set(ws, v);
}
if (v.indexOf(key) < 0) {
v.push(key);
}
}
是有一些方法來設置在同一行的集合v()C所有?
a地圖就像任何其他的JS對象一樣,所以你可以像你一樣添加屬性,但是你正在做的是添加一個屬性''[object object]'' - 而不是添加一個實際的地圖條目。換句話說,你需要使用set/get –
我只是在控制檯上試過你的例子 - 它似乎工作正常。 – Zac
@Zac,它只顯示工作,該值實際上沒有分配給實際對象表示的屬性,而是被設置爲Jaromanda X提到的名爲'[object Object]'的屬性。 –