JavaScript对象创建首选字面量{},安全且语义清晰;属性访问需区分dot(合法标识符)与bracket(动态/特殊键);判断存在性时in查原型链、hasOwnProperty查自身、?.仅防错不判存在。

JavaScript 对象不需要“教程式创建”,关键在于理解不同场景下该用哪种方式,以及属性访问时的隐含行为差异。
对象字面量是最常用也最安全的创建方式
绝大多数情况直接用 {} 就够了,它创建的是普通对象,原型链干净,无副作用。
- 适合静态数据、配置项、函数参数封装:
const user = { name: "Alice", age: 30 }; - 支持计算属性名和方法简写:
const key = "id"; const obj = { [key]: 123, greet() { return "hi"; } }; - 避免用
new Object()—— 冗余且易与构造函数混淆,语义不清
访问属性时 dot 和 bracket 语法不能混用
. 只能接合法标识符,[] 才能处理动态键、空格、数字开头等非常规属性名。
- 正确:
obj.name、obj["first name"]、obj[variable]、obj[123] - 错误:
obj.123(语法错误)、obj.first name(解析为两个 token) - 注意:
obj.undefinedKey返回undefined,但obj[undefined]等价于obj["undefined"]—— 这是常见误判点
用 in、hasOwnProperty 和可选链前先想清楚查什么
判断属性是否存在,三者查的范围和意图完全不同:
立即学习“Java免费学习笔记(深入)”;
-
"prop" in obj:检查自身 + 原型链上是否有该属性(包括继承的toString) -
obj.hasOwnProperty("prop"):只查自身(不推荐直接调用,应写成Object.prototype.hasOwnProperty.call(obj, "prop")防止 obj 为null或覆盖了hasOwnProperty) -
obj?.prop:只在obj非null/undefined时取值,否则短路返回undefined;它不判断属性是否存在,只防报错
属性访问看着简单,但实际出问题多发生在动态键、原型污染、或把 undefined 当作“不存在”来处理的地方。别假设对象结构永远如你所见。











