JS刪除與delete操作符

2022-09-17 20:57:17 字數 2374 閱讀 7300

我以為的刪除以及我的測試

var a = 1;

b = 2;

let c =3;

const d = 4;

console.log(delete a); // false

console.log(delete b); // true

console.log(delete c); // false

console.log(delete d); // false

console.log(a); // 1

console.log(b); // b is not defined

console.log(c); // 3

console.log(d); // 4

var a = ;

var d = a;

a.b = 999;

console.log(a); // object

console.log(d); // object

console.log(delete a); // false

a = undefined;

console.log(a); // undefined

console.log(d); // object

從以上**結果得出:

物件是引用型別,原物件改變,那麼引用此物件的所有變數都會改變。實際var d = a這裡是吧a的物件位址賦值給了d,兩個變數值實際是同乙個物件

deletea變數整體被賦值成別的值時,d變數仍然是原物件,這佐證了var d = a實際傳遞的是物件的位址(不是a變數的位址)

讓我們看看mdn是怎麼說的

delete 操作符(mdn web docs)

delete 操作符用於刪除物件的某個屬性;如果沒有指向這個屬性的引用,那它最終會被釋放。

原來delete操作符就是為了刪除物件的屬性...

var a = , d: function()}

console.log(a); // object , d: d() }

console.log(delete a.a); // true

console.log(a); // object , d: d() }

console.log(delete a.b); // true

console.log(a); // object

console.log(delete a.d); // true

console.log(a); // object

console.log(delete a.tostring); // true

js中陣列也是物件,那麼陣列也可以用delete操作符

var a = [1, , [3, 4]];

console.log(delete a[0]); // true

console.log(a); // array(3) [ <1 empty slot>, , (2) […] ]

console.log(delete a[1]); // true

console.log(a); // array(3) [ <2 empty slots>, (2) […] ]

console.log(delete a[2]); // true

console.log(a); // array(3) [ <3 empty slots> ]

console.log(a.length); // 3

由此看出,delete同樣可以操作刪除陣列元素,但是會留下空插槽?陣列的長度不會改變,因此不推薦使用delete操作符。

事實上文件還有這樣說

在js中當乙個值沒有被任何變數引用時,垃圾**機制就會**這個位址。

(記憶體管理頁)[

這個演算法把「物件是否不再需要」簡化定義為「物件是否可以獲得」。

從2023年起,所有現代瀏覽器都使用了標記-清除垃圾**演算法。所有對j**ascript垃圾**演算法的改進都是基於標記-清除演算法的改進,並沒有改進標記-清除演算法本身和它對「物件是否不再需要」的簡化定義。

JS中delete操作符的作用

總結 刪除物件屬性或變數 其實是刪除對映,如果屬性值被賦值給其他變數,該操作不會影響變數的值 釋放記憶體空間,其值變成undefined delete object.property delete object property 如下 delete obj.frends只是刪除了obj的friend...

Js原型與in操作符

in操作符主要用來判斷物件屬性是否存在,或者用來獲取物件的可列舉的屬性。所以該操作符主要有兩種使用方式 單獨使用時,用來判斷物件屬性是否存在,無論是存在例項中還是原型中,返回true或者false 在for in迴圈中,獲取物件的所有可訪問的 可列舉的屬性。用來判斷是否存在可訪問的屬性 functi...

delete 操作符 刪除對像屬性及相關知識

首先 delete操作符通常用來刪除物件的屬性,而不是一般的變數和函式。例子 物件 var o delete o.x true o.x undefined 變數 var x 1 delete x false x 1 函式 function x delete x false typeof x func...