【发布时间】:2013-04-18 16:23:47
【问题描述】:
所以,在 this post here,人们正在讨论一个事实,即
A = [1,2,3];
然后做
A = [];
不会重置数组而是创建一个新数组。
我的问题是,如果我使用全局对象变量
myglobals = { A : [] }
我可以安全地重置数组吗
myglobals.A = [];
对吗?因为这引用了相同的对象属性,因此我实际上并没有创建一个新数组,是吗?
由于以下评论而更新问题
由于人们普遍认为splice(0) 是可行的方法,并且由于一个非常相似的问题的答案解释了对浏览器释放内存的影响,所以我想知道设置它是否通常是安全和适当的任何已定义的对象(无论是数组、函数还是字符串等)到null,以便在保留它的引用的同时重置它的值?
【问题讨论】:
-
一个对象仍然可以有它的原型,而且它必须!这就是javascript。原型对象,无论是否为空!因为即使
null是东西,它什么都不是,所以[]也是东西,但是var A=undefined是未定义的,但是作为某些原型/类型的对象存在! -
@alex23,感谢您提及其他帖子。看来
myglobals.A.splice(0)实际上并不是最好的方法。从那里接受的答案中,我了解到它应该设置为null以允许浏览器收集内存,对吧? -
@codelio,也许我没有很好地问我的问题,如果是这样的话,我很抱歉。你下面的答案听起来不对:如果我设置
A=undefined,那么typeof(A)返回undefined但我希望得到object -
null没有准备A释放其占用的内存,因为它为空。看看var A=1; A=void(A),也许这就是你的意思,但它仍然是有效的A,就像var A在这一刻一样。如果设置了 objects/value 的父级以使其不再具有该子级,则 javascript 会释放内存。 -
console.log(a.constructor.name, typeof a);//"数组", "对象"
标签: javascript arrays variables scope