首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从const WeakSet中删除对象后没有任何反应

从const WeakSet中删除对象后没有任何反应
EN

Stack Overflow用户
提问于 2018-12-13 08:53:53
回答 1查看 21关注 0票数 1

我试着在Chrome开发人员工具控制台中运行这段代码,运行得很顺利。这对我来说是违反直觉的,因为当您将一个对象设置为null时,您实际上是在删除它。但是const应该防止它被以任何方式改变。

代码语言:javascript
复制
   let obj1 = { id: 1};
   let obj2 = { id: 2};
   const ws = new WeakSet([obj1, obj2]);
   obj2 = null;

这是意料之中的行为,而我只是不理解一些东西,还是控制台和垃圾收集的问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-13 09:23:27

代码语言:javascript
复制
const obj={id:1}
 obj.id=2 //no problem
 obj={id:3}//TypeError: Assignment to constant variable

我在jsbin中运行了你的代码

代码语言:javascript
复制
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,而不是直接将vaue赋给ws,而ws是const。

我能够使用ws.add(obj3)将新对象obj3添加到ws中。即使这是valid.However,ws=new Weakset([obj3])也会抛出一个异常。

ES2015常量并不表示值是“常量”或不可变的。常量值肯定可以改变。下面是没有抛出异常的完全有效的ES2015代码:const foo = {}; foo.bar = 42; console.log(foo.bar); // → 42这里惟一不可变的是绑定。const为变量名(foo)赋值({}),并保证不会发生重新绑定。

Source

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53753531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档