delete
delete 操作符用于删除对象的某个属性;如果没有指向这个属性的引用,那它最终会被释放。
与通常的看法不同,delete 操作符与直接释放内存无关。内存管理通过断开引用来间接完成。
返回值:对于所有情况都是 true,除非属性是一个自身的不可配置的属性,在这种情况下,非严格模式返回 false,严格模式下直接抛出 TypeError。
注意点
- 无法删除全局变量、函数、
let/const/class声明的标识符。 - 不可配置的属性不能删(如
Object.defineProperty(obj, 'x', { configurable: false })后再delete obj.x会失败)。 - 删除数组元素只是把对应索引变成空位,
length不变;真正缩短数组用splice等。 - 删除原型上的属性可能影响所有继承它的对象。
const obj = { a: 1, b: 2 };
delete obj.a; // true
console.log(obj); // { b: 2 }
(function () {
var localVar = 1;
delete localVar; // false(严格模式直接报错)
console.log(localVar); // 1
})();
const arr = [1, 2, 3];
delete arr[1];
console.log(arr); // [1, undefined, 3]
console.log(arr.length); // 3
来源整理自:vue3js.cn 面试官系列



