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