delete 是刪除物件的屬性,例如對於一個對象,
var obj = {key:5};
delete obj.key就是刪除該物件的key屬性,這個沒什麼問題,但當物件的原型prototype物件也存在該屬性時,就值得注意了。
var A = function(){}; A.prototype.testMe = true; var a = new A(); //覆盖原型属性 a.testMe = true; if(a.testMe){ // 一些关键代码... // .... //删除这属性 delete a.testMe; } //第二段 --------------------------- // 在其它模块中 if(a.testMe){ // 一些关键代码... // .... }
第二段是值得注意的,不要以為a中testMe已尼刪除了就不存在了,所以a.testMe就為undefined,即為假,其實它透過原型訪問還是存在的,還是true!
這裡不留神就中招了。
//附:
偵測物件是否存在某屬性, 包含原型鏈的:
if ('attrName' in obj)…
偵測物件是否存在某屬性,是物件本身的,而非原型鏈的:
obj. hasOwnProperty('attrName')
更多JavaScript delete 屬性的使用相關文章請關注PHP中文網!