javascript对象属性可动态增删,常用点号或方括号赋值;delete操作符删除自身属性并返回布尔值;检查存在性推荐object.hasown();冻结/封闭对象限制增删,proxy可拦截操作。

JavaScript 中对象属性可以随时动态添加或删除,不需要提前声明,这是对象的灵活特性之一。
动态添加属性
最常用方式是使用点号(.)或方括号([])语法直接赋值。方括号更适合属性名含特殊字符、空格或来自变量的情况。
-
点号添加:
obj.name = "Alice"—— 属性名必须是合法标识符 -
方括号添加:
obj["full name"] = "Alice Smith"或obj[variableKey] = value - Object.defineProperty: 用于精确控制属性特性(如是否可枚举、可写、可配置)
动态删除属性
使用 delete 操作符,它会从对象自身上移除该属性(不作用于原型链),返回布尔值表示是否删除成功。
-
delete obj.age—— 成功删除返回true;删除不存在的属性也返回true -
delete obj.toString—— 对内置不可配置属性(如某些原生方法)返回false(严格模式下报错) - 注意:
delete不会影响原型上的同名属性,只操作对象自身的属性
检查属性是否存在
添加或删除后常需验证,不同方法含义不同:
-
"prop" in obj—— 检查自身或原型链上是否存在该属性 -
obj.hasOwnProperty("prop")—— 仅检查对象自身(排除继承) -
obj.prop !== undefined—— 不可靠,因为属性值可能恰好是undefined -
Object.hasOwn(obj, "prop")(ES2022+)—— 推荐替代hasOwnProperty,更安全
注意事项和常见陷阱
动态操作看似简单,但有些细节容易出错:
- 用
delete删除数组元素不会改变数组长度,而是留下empty空位(推荐用splice或filter处理数组) - 通过
Object.freeze()或Object.seal()锁定的对象,无法新增/删除属性(delete返回false) - 使用 Proxy 可拦截属性的添加与删除,适合实现响应式或日志记录等高级场景
- 频繁增删属性可能影响 JS 引擎优化(如隐藏类),性能敏感场景建议结构稳定
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











