2013-12-16 56 views
0

據我所知delete操作符刪除相應的引用,而不是由此引用定位的對象。讓我們有一個簡單的對象和應用delete運營商這個屬性之一,例如瞭解JS中的刪除操作符

var o= {prop: "property", test: "sometext"}; 
delete o.prop; 

難道我們抹去了"property"字符串本身或者我們抹去參考這隻和"property"字符串將被垃圾收集器,因爲沒有被刪除-參考。

回答

2

從技術上講,是的,你刪除了屬性和值本身,因爲它不再被引用,將單獨垃圾。

您可以通過讓對象引用兩個屬性來檢查:如果刪除其他屬性,則其中一個不會被觸及。

1

下面的代碼將幫助您使用測試對象和console.log獲得可視結果,以便您可以看到對象屬性發生了什麼。

在刪除之前,當我們console.log(); obj.prop1,它會在你的控制檯中說'喲'。 我們刪除後,這將變成未定義。

你可以使用刪除來清理未使用的屬性,當你完成它們或不再需要它們時,它不是一個大的速度增加,但可能有助於您的網站通過廉價的機器查看。

<script type="text/javascript"> 

    var obj = { 

     prop1: 'yo', 
     prop2: 'yo' 

    }; 

    console.log(obj.prop1); 
    delete obj.prop1; 
    console.log(obj.prop1); 

    console.log(obj); //Will return only prop 2, prop1 is removed from the object. 

</script> 

PS:

記錄所述整個對象的屬性被完全消失後。

1

根據its repsective MDN article,JavaScript中的delete關鍵字「從對象中移除屬性」。也就是說,如果o.prop引用了一個對象(而不是字符串),那麼對該對象的引用(即o.prop)將被刪除,但如果有其他某個變量/屬性指向該對象,則該對象可能會保留在內存中。