Javascript學習筆記 delete運算子

來源:互聯網
上載者:User

一、文法

delete後面的運算式必須給出一個屬性的引用,比如
var o = {a:1};
delete o.a; //此處o.a是對象o的屬性a的引用

只有在with語句裡才能使用單獨的屬性名稱 複製代碼 代碼如下:with(o){
delete a;
}

二、delete的傳回值

delete是普通運算子,會返回true或false。規則為:當被delete的對象的屬性存在並且不能被刪除時 返回false,否則返回true。 這裡的一個特點就是,對象屬性不存在時也返回true,所以傳回值並非完全等同於刪除成功與否。 複製代碼 代碼如下:var o = {a:1};
delete o.a; //返回true
var b = 2;
delete b;//返回false,ECMA規則約定:使用var和function聲明的變數不可以被delete

三、哪些情況下不允許delete

上例提到的var和function聲明的變數不可以被delete,但隱式聲明可以被刪除 複製代碼 代碼如下:function c(){return 12;}
delete c;//返回false
d = function(){return 12;}
delete d;//返回true

不能delete從原型鏈上繼承的屬性,但可以刪除原型鏈上的屬性 複製代碼 代碼如下:function Foo(){}
Foo.prototype.bar = 42;
var foo = new Foo();
delete foo.bar; // 返回true,但並沒有起作用
alert(foo.bar); // alerts 42, 屬性是繼承的
delete Foo.prototype.bar; // 在原型上刪除屬性bar
alert(foo.bar); // alerts "undefined", 屬性已經不存在,無法被繼承

四、特例 複製代碼 代碼如下:eval執行的代碼中如有通過var和function聲明的變數,可以被delete
eval("var a=1");
delete a;
alert(a); //報未定義錯誤

如果聲明是在eval執行代碼中的閉包內進行的,則變數不能被delete
eval("(function(){var a=1;delete a; return a;})()");//1
五、delete 數組元素

從數組中delete其元素並不會影響數組的長度 複製代碼 代碼如下:var arr = ['yuyin','suhuan','baby'];
delete arr[0];
alert(arr.length);//alert 3

被delete的索引值已經不屬於數組,但卻還是可以被訪問,其值為undefined。 複製代碼 代碼如下:var arr = ['yuyin','suhuan','baby'];
delete arr[0];
0 in arr; // false
alert(arr[0]);//undefined
arr[0] === undefined;//true

對比直接將索引值賦值undefined 複製代碼 代碼如下:var arr = ['yuyin','suhuan','baby'];
arr[0] = undefined;
0 in arr; // true
alert(arr[0]);//undefined
arr[0] === undefined;//true

可以看出delete 操作只是將索引值這個屬性從數組中刪除了,數組本身也是對象,這個情況好理解的。如果需要保留索引值,可以用undefined賦值。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.