[js]delete操作符學(xué)習(xí)

我們知道delete操作符只能刪除對象上的某些特殊屬性,該屬性的descriptor描述符必須滿足configurable描述符為true,方才可以刪除。

關(guān)于descriptor描述符

value,get,set,writable,configurable,enumerable

問個問題

現(xiàn)在了解了原理我們來回答一個問題,為什么delete操作符不能刪除var定義的變量,但是卻可以刪除沒有經(jīng)過var定義的全局變量?

因為按理說每個全局變量都掛載到了this上面?。o論nodejs中的global還是pc中的window)不能通過delete this.foo進(jìn)行刪除嗎?

這是為什么呢?

delete is only effective on an object's properties. It has no effect on variable or function names.While sometimes mis-characterized as global variables, assignments that don't specify an object (e.g. x = 5) are actually property assignments on the global object.

或者你可以說,規(guī)范中就這么規(guī)定的,不能刪除聲明的變量和方法名。

var 聲明對屬性描述符configurable的影響

configurable:false是導(dǎo)致該變量無法被刪除的原因。

沒有經(jīng)過var聲明的變量屬性描述符configurable的情況

所以,如果設(shè)置全局變量的時候?qū)ζ鋍onfigurable屬性描述符進(jìn)行設(shè)置,就能使用delete操作符對該變量進(jìn)行刪除了。


一種新的的設(shè)置全局變量的方式,不建議編碼時使用

哪些屬性也不可以刪除?

//內(nèi)置對象的內(nèi)置屬性不能被刪除
delete Math.PI; // 返回 false
//你不能刪除一個對象從原型繼承而來的屬性(不過你可以從原型上直接刪掉它).
 function Foo(){}
 Foo.prototype.bar = 42;
 var foo = new Foo();
 // 無效的操作
 delete foo.bar;       
 // logs 42,繼承的屬性
 console.log(foo.bar);       
 // 直接刪除原型上的屬性
 delete Foo.prototype.bar;
 // logs "undefined",已經(jīng)沒有繼承的屬性
 console.log(foo.bar);

這個刪除效果應(yīng)該和a=null;是等效的嗎?

Unlike what common belief suggests, the delete operator has nothing to do with directly freeing memory (it only does indirectly via breaking references. See the memory managementpage for more details).

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 12,358評論 6 13
  • JS基礎(chǔ)講解 JavaScript組成ECMAScript:解釋器、翻譯DOM:Document Object M...
    FConfidence閱讀 621評論 0 1
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,544評論 19 139
  • “你一定要利用上下文自己已經(jīng)了解的所有字句,來推敲出自己不了解的那個字的意義”我就問問這不是廢話,我自己都知道。作...
    爺凌丶貝勒閱讀 508評論 0 0
  • 做一個心大的人,該吃吃,該喝喝,天塌下來有高個子的人頂著,N覺醒來你又是一條好漢! 01 給失戀的人 很多人都經(jīng)歷...
    聲聲曼man閱讀 897評論 0 1

友情鏈接更多精彩內(nèi)容