Поменялась ли сборка мусора в Map недавно?

Основное различие между Map и WeakMap (как я и думал) в том, что:

Если мы сохранили объект в Map, а затем позже на этот объект не ссылаются в других местах, этот объект все равно не будет включен в процесс сбора мусора, и мы все равно сможем получить к нему доступ в Map.

Но если он хранится в WeakMap, а затем на этот объект не ссылаются где-либо еще в коде, то он будет собирать мусор.

Теперь, глядя на этот пример и вывод, который я получаю, похоже, что даже объект в Map, который больше не имеет ссылки где-то еще, теперь собирает мусор:

const userRoles = new Map();
let Corey = { name: "Corey", age: "40" };

userRoles.set(Corey, "Admin");

Corey = null;

console.log(userRoles.get(Corey)); // Undefined ??

Изменились ли спецификации, потому что я не вижу каких-либо утверждений относительно этого в MDN или я что-то неправильно понял?

1 ответ

console.log(userRoles.get(Corey)); // Undefined ??

Это undefined потому что у вас нет записи на вашей карте для null, Вы установили Corey в null и поэтому, когда вы запускаете эту строку кода, вы делаете userRoles.get(null),

Запись с ключом под объектом все еще там. Вы можете найти это через итерацию, keys повторяемый и т. д.:

const userRoles = new Map();
let Corey = { name: "Corey", age: "40" };

userRoles.set(Corey, "Admin");

Corey = null;

console.log(userRoles.get(Corey)); // Undefined
console.log(Array.from(userRoles.keys())[0]);

Другие вопросы по тегам