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 面试官系列