據我所知delete
操作符刪除相應的引用,而不是由此引用定位的對象。讓我們有一個簡單的對象和應用delete
運營商這個屬性之一,例如瞭解JS中的刪除操作符
var o= {prop: "property", test: "sometext"};
delete o.prop;
難道我們抹去了"property"
字符串本身或者我們抹去參考這隻和"property"
字符串將被垃圾收集器,因爲沒有被刪除-參考。
據我所知delete
操作符刪除相應的引用,而不是由此引用定位的對象。讓我們有一個簡單的對象和應用delete
運營商這個屬性之一,例如瞭解JS中的刪除操作符
var o= {prop: "property", test: "sometext"};
delete o.prop;
難道我們抹去了"property"
字符串本身或者我們抹去參考這隻和"property"
字符串將被垃圾收集器,因爲沒有被刪除-參考。
從技術上講,是的,你刪除了屬性和值本身,因爲它不再被引用,將單獨垃圾。
您可以通過讓對象引用兩個屬性來檢查:如果刪除其他屬性,則其中一個不會被觸及。
下面的代碼將幫助您使用測試對象和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:
記錄所述整個對象的屬性被完全消失後。
根據its repsective MDN article,JavaScript中的delete
關鍵字「從對象中移除屬性」。也就是說,如果o.prop
引用了一個對象(而不是字符串),那麼對該對象的引用(即o.prop
)將被刪除,但如果有其他某個變量/屬性指向該對象,則該對象可能會保留在內存中。