Reflect.deleteProperty() 是 JavaScript 中删除对象指定属性的静态方法,接收目标对象和属性名,返回布尔值;它比 delete 操作符更安全、一致,常用于 Proxy 拦截器中。

Reflect.deleteProperty() 是 JavaScript 中用于删除对象指定属性的静态方法,它比直接使用 delete 操作符更规范、更可预测。
基本用法:Reflect.deleteProperty(target, propertyKey)
该方法接收两个参数:
- target:要操作的对象(不能是 null 或 undefined)
- propertyKey:要删除的属性名(字符串或 Symbol)
返回一个布尔值:true 表示删除成功或属性本就不存在;false 表示删除失败(例如属性不可配置)。
示例:
立即学习“Java免费学习笔记(深入)”;
const obj = { a: 1, b: 2 };Reflect.deleteProperty(obj, 'a'); // true
console.log(obj); // { b: 2 }
与 delete 操作符的区别
delete obj.prop 在严格模式下对不可配置属性会抛出错误,而 Reflect.deleteProperty() 总是返回 false,不会报错,行为更一致、更适合在函数式或代理(Proxy)场景中使用。
例如:
const obj = {};Object.defineProperty(obj, 'x', { value: 1, configurable: false });
delete obj.x; // 严格模式下报 TypeError
Reflect.deleteProperty(obj, 'x'); // false,安全且可判断
配合 Proxy 使用(常见场景)
在 Proxy 的 deleteProperty 拦截器中,推荐用 Reflect.deleteProperty() 转发操作,语义清晰且保持默认行为:
deleteProperty(target, prop) {
console.log(`正在删除 ${prop}`);
return Reflect.deleteProperty(target, prop);
}
};
const proxy = new Proxy({ a: 1 }, handler);
delete proxy.a; // 输出日志,并成功删除
注意事项
- 只能删除对象自身的可配置属性;继承来的属性删不掉(也不会报错,返回 false)
- 对 undefined、null 等非对象目标会抛出 TypeError,使用前建议校验
- 数组索引属性也可删除,但不会改变 length,也不会自动重排索引(和 delete 一样)


















