delete 运算符的返回值是一个布尔值,表示删除操作是否成功。在严格模式下,如果尝试删除一个不可配置的属性或变量,它会抛出 syntaxerror;在非严格模式下,则会静默失败并返回 false。

删除对象属性时的具体表现
当对对象属性使用 delete 时,若属性存在且可配置,则删除成功并返回 true;若属性不存在或不可配置(如通过 Object.defineProperty 设置的 configurable: false),则返回 false。

const obj = { a: 1 };
console.log(delete obj.a); // true
console.log(delete obj.b); // false (属性不存在)
const obj2 = {};
Object.defineProperty(obj2, 'c', { value: 2, configurable: false });
console.log(delete obj2.c); // false (不可配置)
删除全局变量与局部变量的区别
在全局作用域中,使用 var 声明的变量是不可配置的,因此 delete 无法删除它们,返回 false。而通过赋值隐式创建的全局属性(非 var 声明)是可以被删除的,返回 true。在函数内部,delete 对局部变量无效,会抛出语法错误。
立即学习“Java免费学习笔记(深入)”;

// 全局作用域
var globalVar = 1;
delete globalVar; // false (var 声明的变量不可删除)
globalProp = 2; // 隐式全局变量
delete globalProp; // true
// 函数内部
function test() {
var localVar = 1;
delete localVar; // SyntaxError in strict mode
}
数组元素删除后的状态变化
使用 delete 删除数组元素后,该位置变为 empty(空位),但数组长度不变。后续访问该索引将返回 undefined,且该元素不会出现在 for...in 或 Object.keys() 的遍历结果中,但会影响 forEach 等方法的执行。


















