Javascript中的delete介绍


在JavaScript中,`delete` 运算符用于删除对象的属性。当对一个对象的属性执行 `delete` 操作时,如果删除成功,该属性会从对象中移除,并且 `delete` 表达式的结果为 `true`。如果属性不存在或者不能被删除(例如,属性是对象的不可配置属性),则 `delete` 表达式的结果为 `false`。

这里有一个简单的例子来说明 `delete` 的用法:


let obj = {
  name: "Alice",
  age: 30
};

console.log(obj.name); // 输出: Alice
delete obj.name;
console.log(obj.name); // 输出: undefined,因为name属性已被删除

console.log(delete obj.name); // 输出: true,因为name属性之前存在,现在被删除了
console.log(delete obj.nonExistentProperty); // 输出: true,即使属性不存在,delete操作也会返回true

// 注意:对于非对象的属性(如原始类型的值),delete不会报错,但也不会有任何效果,因为它只适用于对象属性
let num = 10;
console.log(delete num); // 输出: false,因为delete不能用于非对象的属性

需要注意的是,`delete` 运算符不会删除具有不可配置(`configurable: false`)属性的属性。在ES5中,通过 `Object.defineProperty()` 方法定义的属性,默认是可配置的,但你可以将 `configurable` 属性设置为 `false` 来阻止属性的删除。


let obj = {};
Object.defineProperty(obj, 'prop', {
  value: 123,
  configurable: false // 不可配置
});

console.log(delete obj.prop); // 输出: false,因为prop是不可配置的

总结来说,`delete` 是JavaScript中用于删除对象属性的运算符,但使用时需要注意属性的可配置性。