将对象属性设为undefined能否删除该属性?含GC及对象展开疑问
问题解答
1. 将对象属性设置为undefined能否删除该属性?
不能。把属性值设为undefined只是清空了属性的值,但属性的键仍然存在于对象的属性列表中。你可以通过'x' in o验证,结果会是true,说明该属性键并未被删除。
2. 执行代码后,o2中是否不存在x属性?
不存在的说法是错误的。对象扩展运算符{ ...o }会复制原对象所有可枚举属性,包括值为undefined的属性。所以执行代码后,o2中仍然存在x属性,其值为undefined,'x' in o2的结果是true。
3. 垃圾回收器(GC)能否删除该属性对应的键?
不会。GC只会回收没有被任何引用指向的内存空间。只要属性键还被对象(o或o2)引用着,就不会被GC回收。如果想要彻底移除属性键,需要使用delete操作符,比如delete o.x,此时属性键会被从对象中移除,后续如果没有其他引用指向它,GC才会回收对应的内存。
内容的提问来源于stack exchange,提问作者psqq
相关产品推荐
相关产品推荐

