我试着在Chrome开发人员工具控制台中运行这段代码,运行得很顺利。这对我来说是违反直觉的,因为当您将一个对象设置为null时,您实际上是在删除它。但是const应该防止它被以任何方式改变。
let obj1 = { id: 1};
let obj2 = { id: 2};
const ws = new WeakSet([obj1, obj2]);
obj2 = null;这是意料之中的行为,而我只是不理解一些东西,还是控制台和垃圾收集的问题?
发布于 2018-12-13 09:23:27
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,而不是直接将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)赋值({}),并保证不会发生重新绑定。
https://stackoverflow.com/questions/53753531
复制相似问题