Редактировать: const означает, что вы можете обновить значение того, к чему относится const, но вы не можете переназначить его ссылку на что-то другое
const obj={id:1}
obj.id=2 //no problem
obj={id:3}//TypeError: Assignment to constant variable
Я запустил ваш код в jsbin
let obj1 = { id: 1};
let obj2 = { id: 2};
const ws = new WeakSet([obj1, obj2]);
console.log(ws.has(obj2))
obj2 = null;
console.log(ws.has(obj2))
И вот вывод: true
false
Это ожидаемое поведение, даже с const.Поскольку вы устанавливаете для obj2 значение null, а не присваиваете vue непосредственное назначение, то есть const.
Я смог добавить новый объект obj3 к ws, используя ws.add(obj3)
.Даже это верно. Однако ws=new Weakset([obj3])
сгенерирует исключение.
ES2015 const не означает, что значение является «постоянным» или неизменным.Значение const может определенно измениться.Ниже приведен совершенно корректный код ES2015, который не выдает исключение: const foo = {}; foo.bar = 42; console.log(foo.bar); // → 42
Единственное, что здесь является неизменным, - это привязка.const присваивает значение ({}) имени переменной (foo) и гарантирует, что связывание не произойдет.
Source