[英]Delete object/associative array
可以說我已經在JavaScript中創建了一個對象及其屬性,如下所示:
var obj = {};
obj['bar'] = 123;
obj['bar']['foo'] = new Array();
obj['bar']['xyz'] = new Array();
之后,我將元素推入兩個數組。 如果我再寫
delete obj['bar'];
兩個數組也會被刪除嗎?
delete
本身不會清除數組,但會刪除對它們的唯一現有引用。 除非您在其他地方獲得對它們的引用,否則,它們將被GC聲明為版權聲明,因為在此之后將不再有引用。
GC何時,如何或實際上是否回收其內存取決於實現。
兩個數組也會被刪除嗎?
他們將有資格進行垃圾回收 ,前提是沒有其他任何引用。 根據該代碼,將不會有任何結果。 何時以及是否真正清除它們取決於實現。
但是請注意,即使在刪除bar
之前,它們也有資格使用GC,因為您的代碼做得很奇怪。 查看評論:
// Creates a blank object, so far so good.
var obj = {};
// Sets the `bar` property to the number 123.
obj['bar'] = 123;
// Retrieves the value of `bar` (the primitive number 123) and
// *converts* it into a `Number` instance (object), then
// creates a property on that object called `foo`, assigning a
// blank array to it. Because the Number object is never stored
// anywhere, both it and the array are IMMEDIATELY eligible for
// garbage collection. The value of `obj['foo']` is unaffected,
// it remains a primitive number.
obj['bar']['foo'] = new Array();
// The same happens again, a temporary Number instance and
// array are created, but both are IMMEDIATELY eligible for
// garbage collection; the value of `obj['bar']` is unaffected.
obj['bar']['xyz'] = new Array();
因此,您甚至不必刪除bar
,這些數組立即可以進行垃圾回收。 發生這種情況的原因是,在JavaScript中,數字是可以自動提升為Number
對象的基元,但是不會影響分配給基元編號的屬性的值。 所以:
var obj = {};
obj['bar'] = 123;
obj['bar']['foo'] = []; // [] is a better way to write new Array()
console.log(obj['bar']['foo']); // "undefined"
如果將obj['bar'] =
行更改為:
obj['bar'] = {};
要么
obj['bar'] = []; // Arrays are objects
...然后foo
和xyz
屬性不會立即消失,並且數組將一直存在,直到bar
被清除為止。
是的,你可以刪除obj['bar']
屬性,這將使相關聯的陣列中obj['bar']
進行垃圾回收(假設有其他地方對他們沒有其他的引用)。
您不能delete obj
。 但是,您可以使用obj = null;
釋放obj的屬性以進行潛在的垃圾回收。
如果成功刪除了某些內容,則delete
函數返回true
,如您在此jsfiddle中所見
alert(delete obj['bar']); // alerts true;
但是,您不能刪除var或函數。
var x = 2;
alert(delete x); // alerts false;
function x(){};
alert(delete x); // alerts false;
若要進一步閱讀,這里有一篇有關javascript delete
功能的精彩文章: http : //perfectionkills.com/understanding-delete/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.