JavaScript delete

admin發表於2018-10-09

從運算子名稱可以猜想到,它可以刪除一些東西。

下面通過程式碼例項介紹一下此運算子能刪除何種東西,有什麼限制。

一.基本介紹:

此運算子通常用於刪除物件的屬性,也可以在滿足一定條件下刪除變數。

下面分別通過程式碼例項做一下介紹。

(1).運算子可以刪除物件的屬性:

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let obj={
  webName:"螞蟻部落",
  url:"http://www.softwhy.com",
  address:"青島市南區"
}
delete obj.address;
console.log(obj.address);

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/09/221845l8kkhkahy9o9bosw.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

可以看到address屬性已經被刪除。

(2).刪除宣告的變數:

並不是所有宣告的變數都可以刪除。

首先看一段程式碼例項:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
var webName="螞蟻部落";
address="青島市南區";
delete webName;
delete address;
console.log(webName);
console.log(address);

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/09/221914w3iegp9y9eloyz3k.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

有上述程式碼執行效果截圖如下,可以得出如下結論:

(1).使用var宣告的變數不能被刪除。

(2).沒有使用var宣告的變數可以被刪除。

再來看一段程式碼例項:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
eval("var webName='螞蟻部落';"); 
delete antzone; 
console.log(antzone);

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/09/221945id5e6re6xnbne56b.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

可以看到,使用eval()解析一段JavaScript程式碼,儘管使用了var,但是依然可以刪除。

在eval上下問環境中,不使用var宣告也可以被刪除,這裡就再演示。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let arr=["螞蟻部落",4,"青島市南區"];
delete arr.length;
console.log(arr.length);

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/09/222019ps3qoynsuy2osgs6.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

length是內建屬性,無法被刪除,通常內建屬性是無法被刪除的。

二.能否被刪除的原理:

在很多文章經常會說,之所以一個物件屬性不能夠被刪除,是因為此屬性具有DontDelete特性。

現在糾正一下,DontDelete特性是ES3的概念,現在已經被ES5中的Configurable特性值為false所替代。

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let antzone = {
  webName:"螞蟻部落",
  url: "http://www.softwhy.com",
  age:4
};
Object.defineProperty(antzone,"webName",{
    configurable:false
});
delete antzone.webName;
console.log(antzone.webName);

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/09/222052m4jjs656712z6szl.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

可以看到,將webName屬性的configurable特性值設定為false。

這樣delete運算子就無法刪除此類屬性。

關於configurable可以參閱configurable、enumerable和writable介紹一章節。

相關文章