对象字面量{}最安全简洁,适合固定少量属性;方括号访问支持动态键和特殊字符名;属性增删改均通过赋值实现,delete慎用以免影响性能。
直接用 {} 创建对象,适合属性名固定、数量不多的场景。它避免了构造函数可能带来的原型污染或 this 绑定问题,也比 new Obje 更简洁直观。
ct()
常见错误是误把逗号写成分号,或在末尾多加逗号导致旧版 IE 报错;另外属性名含空格或特殊字符时必须加引号,否则语法报错:
const user = {
name: "Alice",
"full name": "Alice Smith", // 必须加引号
age: 30
};
点号(.)只能访问合法标识符形式的属性名,比如 obj.name;一旦属性名是变量、含空格、以数字开头或含特殊字符,就必须用方括号语法 obj["full name"] 或 obj[variable]。
obj.key 等价于 obj["key"],但前者不能用于 obj["first name"]
const key = "age"; obj[key]
undefined,不会报错JavaScript 对象是可变的,无论属性是否已存在,赋值操作都直接生效。区别只在于:已存在属性是修改,不存在则是新增。
注意几个易错点:
undefined 或 null 对象调用点号或方括号会抛出 TypeError
Object.freeze(obj) 后无法新增或修改属性(静默失败,严格模式下报错)obj[123],实际也是 obj["123"]
const config = { theme: "dark" };
config.theme = "light"; // 修改
config.version = "2.1"; // 新增
config["api timeout"] = 5000; // 新增,带空格的键
delete,但慎用delete obj.key 或 delete obj["key"] 可以移除属性,返回 true(即使属性不存在也返回 true)。但它会影响性能,尤其在 V8 引擎中会破坏隐藏类,导致后续属性访问变慢。
更推荐的做法是赋值为 undefined 或 null,或者用解构 + 剩余对象来“逻辑删除”:
const { password, ...safeUser } = user; // 移除 password 字段
真正需要物理删除时再用 delete,且要确认该对象后续不再高频读写。