delete运算符用于删除对象自有属性,成功返回true、失败返回false;仅影响目标对象自身属性,不作用于原型链或var/let/const声明的变量;依赖configurable特性,不可配置属性删除失败;不触发垃圾回收,仅断开引用。

delete 运算符用于从对象中移除指定的自有属性(own property),删除成功返回 true,失败(如属性不可配置)返回 false。它不会影响原型链上的属性,也不能删除用 var、let、const 声明的变量或函数声明。
基本语法和使用方式
写法为 delete object.property 或 delete object['property'],推荐用方括号形式处理动态属性名或含特殊字符的属性名。
- 直接删除:
delete obj.name - 动态删除:
delete obj[propertyName] - 注意:不能写成
delete obj['a.b']删除嵌套属性 —— 它只删最外层对象的某个键,不支持点路径解析
成功与失败的常见情况
是否能删掉,取决于属性的 configurable 特性:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 普通对象属性默认可配置 →
delete成功 - 用
Object.defineProperty设置configurable: false后 →delete返回false(严格模式下还会报错) - 全局作用域下用
var声明的变量 → 属性不可删除(即使在全局对象上),delete window.xxx返回false - 函数参数、内置对象的某些属性(如
Math.PI)也不可删除
delete 不会触发垃圾回收,也不清空内存
delete 只是断开对象对属性的引用,不影响属性值本身:
- 如果该属性值是对象,且没有其他引用指向它,后续可能被 GC 回收;但
delete本身不立即释放内存 - 若属性值被其他变量或闭包持有,即使删了属性,值仍存在
- 不要误以为
delete obj.prop等价于obj.prop = undefined—— 后者保留键,前者彻底移除键
替代方案和注意事项
多数场景下,delete 并非首选,尤其在性能敏感或需保持属性顺序时:
- 想“逻辑删除”可用
obj.prop = undefined或obj.prop = null,更轻量 - 遍历对象时想跳过某些属性,可配合
hasOwnProperty()或Object.keys() - 需要批量删除多个属性?可构造新对象(如用解构赋值排除):
const { unwanted, ...rest } = obj - Vue 2 中响应式对象需用
Vue.delete(obj, 'key')(本质仍是delete,但会触发更新);Vue 3 的reactive对象不支持直接delete,应改用Reflect.deleteProperty()
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










