delete 操作符
delete 操作符用于刪除對象的某個屬性;如果沒有指向這個屬性的引用,那它最終會被釋放。(MDN)
delete 操作符可以刪除對象的一個屬性。
JavaScript 中的關鍵字與其他語言略有不同,如 C++ 中的 delete
關鍵字會釋放內存,JavaScript中不會,只有當一個值的引用歸零時,才會被釋放。
1. 使用 delete
delete 操作符在與操作數運算結束后,會返回一個布爾值,成功返回 true。在屬性是不可配置的情況下會返回 false,在嚴格模式下,則會拋出 TypeError
異常。
var person = {
age: 16,
};
delete person.age;
console.log(person); // 輸出:{}
當一個屬性為不可配置的時候:
var person = {};
Object.defineProperty(person, 'age', {
value: 17,
writable: true,
configurable: false,
});
delete person.age; // 返回false
console.log(person); // 輸出:{age: 17}
2. 在嚴格模式下的 delete
如果在嚴格模式下,對一個不可配置屬性進行 delete 操作,則會拋出異常。
'use strict'; // 開啟嚴格模式
var person = {};
Object.defineProperty(person, 'age', {
value: 17,
writable: true,
configurable: false,
});
delete person.age; // TypeError: Cannot delete property 'age'
3. 對使用 var 聲明的變量進行 delete
使用 var 聲明的變量默認是不可配置的,所以對 var 聲明的變量進行 delete
操作是無效的。
var number = 996;
delete number; // false
console.log(number);
這里的 number
是 window
下的一個屬性,可以使用 Object.getOwnPropertyDescriptor
來查看屬性的描述符。
var number = 996;
Object.getOwnPropertyDescriptor(window, 'number');
4. 使用 delete 刪除數組成員
delete 可以用于刪除數組成員,并且是真正意義的刪除,可以讓指定的成員變成 empty
。
var arr = [2, 4, 6, 8, 10];
delete arr[0]; // true
console.log(arr);
有關數組 empty 相關的內容可以查閱數組章節。
5. 小結
delete
操作符就是用來刪除對象下的屬性,但這個屬性還有在其他地方被引用,就不會被釋放。